Pip apt-get tarafından kurulan paketlerin üzerine yazıyor mu?


9

Önceden pip installkullanarak apt-getönceden yüklediğim bir paketi yanlışlıkla alırsam ne olur ? En son sürümü (yani muhtemelen yüklediğim sürümü pip) kullanmaya mı başladım ? Tam tersi ne olur?

Not: Python'u sanal bir ortamda kullanmıyorum (sadece neden yapmam gerektiğini bilmediğim için - veri analiz aracı olarak Python'u kullanıyorum ve çoğunlukla her şeyin en son sürümünü kullanmaya çalışıyorum).


Eğer yanılmıyorsam, aynı paketleri apt-getvepip
Lucio

Corerct, pipbunları /usr/localvarsayılan olarak alt dizinlere veya isterseniz başka bir dizine yükler .
Timo

3
Ama mesela, bunu ilk apt-get install python-pandasizlediğimde pip install pandasya da başka bir şekilde yaparsam ne olur ? Global python kurulumum her iki sürümden hangisini kullanacağını nasıl biliyor?
Fred S

1
@FredS: Terminalde aşağıdaki komutu çalıştırın, Python bir modül için o sırayla arayacaktır:python -c "import sys; print sys.path"
Timo

Yanıtlar:


3

@Timo'nun yorumunda belirtildiği gibi python -c "import sys; print sys.path", Python yüklemeniz için size Python modülü yükleme yolunu verecektir. 16.04'lük nispeten yeni bir kurulumda, üç not defteri vardır (benimki toplam 10 dosya arasında):

  • '' (uygulamanın dizini)
  • '/usr/local/lib/python2.7/dist-packages' (pip'in modülleri kurduğu yer)
  • '/usr/lib/python2.7/dist-packages' (apt modüllerini kurarken)

Ancak dikkat edilmesi gereken en önemli nokta '/usr/local/lib/python2.7/dist-packages' ifadesinin '/usr/lib/python2.7/dist-packages' den daha YÜKSEK olmasıdır.

Bir Python paketini apt (-get) yoluyla kurarsanız, '/usr/lib/python2.7/dist-packages' içine yüklenir. Daha sonra modülü kurmak için pip'i kullanmayı denerseniz, pip başlangıçta bağımlılığın zaten karşılandığına dair bir uyarı verecektir, ardından çıkın; --upgrade bayrağını eklemek pip'i kurmaya zorlar ve modülü '/usr/local/lib/python2.7/dist-packages' içine kurar. (Bildirim ayrıca sürüm '/usr/lib/python2.7/dist-packages' kaldırıldı olmadığını söylüyor çıkış) Daha sonra Pip-yüklü sürüm aşağıdaki kullanarak kullanılıyor biri olduğunu doğrulayabilirsiniz: python -c "import MODULE; print MODULE.__file__".

Bu nedenle, pip aracılığıyla kurulan paketlerin sistem tarafından kurulan paketlere göre öncelikli olacağı, ancak apt (-get) 'dan yüklenen hiçbir şeyin üzerine yazılmayacağı gösterilmiştir.


1

@Byan Wyatt'a eklemek için, PIP tarafından yüklenen / yükseltilen öğelerin (muhtemelen daha eski olan) APT tarafından yüklenen paketlere göre öncelikli olması arzu edilir (ve amaçlanmıştır). Sistemim apt ve pip yollarını tersine çevirdi. Şöyle olmalıdır (diğer girişleri göz ardı ederek):

  • '/usr/local/lib/python2.7/dist-packages' (pip'in modülleri kurduğu yer)
  • '/usr/lib/python2.7/dist-packages' (apt modüllerini kurarken)

Henüz yapmam gereken bazı bilinmeyen eylemler nedeniyle, bu yollar benim için ters sırada göründü (diğer girişleri göz ardı ederek):

  • '/usr/lib/python2.7/dist-packages' (apt modüllerini kurarken)
  • '/usr/local/lib/python2.7/dist-packages' (pip'in modülleri kurduğu yer)

Ben eklendi bir şeyi çıkıyor /usr/lib/python2.7/dist-packagesiçin /usr/local/lib/python2.7/dist-packages/easy-install.pth. Sadece çizgiyi kaldırmak easy-install.pthbenim için yanlış ayarlamayı düzeltti. /usr/lib/python2.7/dist-packagesbaşka bir aşamada daha ileri bir aşamada eklendiğinden hala yolumda.

Yan not olarak, pprint yolunuzu daha güzel gösterecektir ... ie:

$ python -c "import sys; import pprint; pprint.pprint(sys.path)"
['',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
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.