apt-get install vs pip yükleme


103

Python paketlerini indirirken yukarıdaki komutların kullanılması gereken durumlar hakkında biraz kafam karıştı. Bu sorunun cevabına uygun olarak pyudev isimli bir paket indirmeye çalışıyordum . Bu komutu yerine getirdim:

sudo pip install python-pyudev

ancak aşağıdaki mesajı aldı:

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

Ancak aşağıdakiler iyi çalıştı:

sudo apt-get install python-pyudev

Ne zaman bir apt-getpaket yüklemek için kullanılan gerekiyordu ve ne zaman olduğunu python-pipkullanılır?


2
pipyalnızca python paketlerini kurmak için kullanılır, ancak apt-gettüm paketleri kurmak için kullanılır.
Avinash Raj

3
Tamam, peki neden pipon python-pyudev kuramıyor?
Vineet Kaushik

Yanıtlar:


100

PyPI , Python Paketi dizinidir - python modüllerinin deposu.

pippaketleri doğrudan PyPI'den indirmek ve kurmak için kullanılır. PyPI, Python Yazılım Vakfı tarafından barındırılmaktadır . Sadece python paketleri ile ilgilenen uzmanlaşmış bir paket yöneticisidir.

apt-get Canonical tarafından barındırılan Ubuntu depolarından paketleri indirmek ve yüklemek için kullanılır.

Dan piton paketlerin kurulumu arasındaki farkların bazıları apt-getve pipaşağıdaki gibidir:

  • Canonical, yalnızca seçilen python modülleri için paketler sağlar. Oysa PyPI çok daha geniş bir python modülü yelpazesine ev sahipliği yapıyor. Bu yüzden, kullanamayacağınız bir sürü python modülü var apt-get.

  • Canonical yalnızca herhangi bir paketin tek bir versiyonuna ev sahipliği yapar (genellikle en son sürüm veya en son yayınlanan sürüm). Yani apt-getistediğimiz python paketinin versiyonuna karar veremiyoruz. pipbu durumda bize yardımcı olur. Daha önce PyPI'ye yüklenen paketin herhangi bir sürümünü yükleyebiliriz. Bu, bağımlılıklarda çatışma durumunda son derece yararlıdır.

  • apt-getpython modüllerini sistem çapında bir konuma kurar. Sadece sanalenv projemizdeki modülleri kuramayız . pipbu sorunu bizim için çözer. pipVirtualenv'i etkinleştirdikten sonra kullanıyorsak , sadece sanalenv projemizdeki modülleri kurmak yeterince akıllıdır. Önceki noktada belirtildiği gibi, sistem genelinde bir yere önceden kurulmuş belirli bir python paketinin bir sürümü varsa ve projemizden biri aynı python paketinin daha eski bir sürümünü gerektiriyorsa, bu durumlarda yüklemek için virtualenv ve pip'i kullanabiliriz Bu python paketinin eski sürümü ile herhangi bir çakışma olmadan.

  • As @Radu Rădeanu işaret bu yanıtında , genellikle de paketlerin isimlerinde farklılık olacaktır. Canonical genellikle Python 2 paketlerini python-<package_name>ve Python 3 paketlerini olarak adlandırır python3-<package_name>. Oysaki pipbiz sadece <package_name>Python 2 ve Python3 paketleri için kullanmamız gerekiyor .

Hangisini kullanmalısınız?

Her ikisi de apt-getve pipyükleme sırasında başka bir paket bağımlılığını otomatik olarak yükleyen olgun paket yöneticileridir. İstediğin gibi birini kullanabilirsin. Bununla birlikte, belirli bir python paketi sürümünü kurmanız veya paketi bir sanal sunucuya kurmanız veya yalnızca PyPI'de barındırılan bir paketi kurmanız gerekirse; sadece pipbu sorunu çözmenize yardımcı olur. Aksi halde, paketleri sistem genelinde bir yere kurmaktan çekinmiyorsanız, kullanmanızın apt-getveya kullanmanızın bir önemi yoktur pip.


5
Ayrıca, kullanmak için gayret birini veya diğer ikisi değil, pipve apt-getsimutaneously.
earthmeLon,

3
Er ya da geç, bir paket veya onun tarafından sağlanmayan bir versiyonuna ihtiyaç duyulabilir apt-get. Her ikisini de kullanmak apt-getve pipçatışmalara neden olabileceğinden, tavsiye her zaman piptarafından desteklenen paketler için kullanılmalı pipmıdır?
Abhishek Anand

2
@Abhishek, tercih ettiğim yöntem Python'u her zaman sanalenvde kullanmaktır. Yani evet, pip'i apt üzerinde kullanmayı tercih ediyorum ..
Aditya

Bu, belirli senaryolarda kendi solucanlarını açar. Diyelim ki ile paketleri en yüklü diyelim sudo pipolmadan virtualenvprojelerinizin en (temiz Ubuntu yüklemesinde sağlananlardan daha ama daha kapsamlı) aynı ortamı gerekli çünkü. Bir sistem yükseltme yapmak ve Ubuntu (olduğu gibi yeni bir sürüme Python yükseltmeye karar verdiğinde Sonra zestyetmek artful- 3.6 Python 3.5), içinde pip yüklenmiş paketlerin hepsi /usrgeride bırakılan ve pip.get_installed_distributions()boş bir liste üretir.
z33k

Pip'in global bağlamda kullanılması tamamen yanlış ve kullanılmamalıdır, çünkü sistem piton kurulumunu bozacaktır. pip ve apt-get tamamen farklı şeyler ve bunları karşılaştırmak yanlıştır. Diğer python olmayan kitaplıklara bağlı olan bir python modülü kurmaya çalışın ve apt-get'e neden ihtiyaç duyabileceğinizi hemen anlayacaksınız.
mestia

21

@AvinashRaj söylediği gibi onun comment , pipsadece piton paketlerini yüklemek için kullanılır, ancak apt-getherhangi bir programlama dilinde oluşturulan paketleri yükleme için kullanılır.

Asıl sorun, her iki durumda da doğru paket adını bulmak:

pip search pyudev

Kullandığınız yüklemek istediğiniz paket için size doğru ismi verecek pip installşekilde,

apt-cache search pyudev

kullanarak yüklemek istediğiniz paket için doğru adı verecektir apt-get install:

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

Yani, Conlusion içinde, bir muhabir sudo apt-get install python-pyudevolduğunu sudo pip install pyudev, değil sudo pip install python-pyudev.

Şimdi bir python paketi kurmak istediğinizde ne seçmek istediğinizi size bağlı: pipveya apt-get. Örneğin , ve kullanarak bir paket yükleme farkıyla ilgili bu Soru ve Cevap bölümüne bakın .pipapt-get


2

Tercih ettiğim yöntem her zaman kullanmak aptve sadece modülün henüz Debian / Ubuntu deposunda kullanılamaması durumunda değil pip, sadece kullanıcı bağlamında - --userflag olması durumunda. pipYine de bunlardan birini kullanarak tüm yapı bağımlılıklarını kurmalıyız, diyelim ki Ubuntu'nun deposunu diyelim ya da bunlara sıkıcı bir görev olabileceklerini sağlayın. apt-getİkili paketleri kurarken pipindirdikten sonra oluşturur. Birisi sistem konumlarına modülleri kurmak için pip kullanmamalı. Bu düz yanlış. --userBir modülü ana konuma kurmak için her zaman bayrak kullanın. Düzgün yapılandırılmış PYTHONPATH, python'un önce HOME'dan ve sonra yüklü sistem modüllerinden modülleri almasına izin verdi apt-get.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.