Pip ile bir paketin birden çok sürümünü yükleme


85

Başvurumda kullanmak istiyorum:

  • packageA, hangi gereksinimler packageX==1.3
  • packageB, hangi gereksinimler packageX==1.4
  • packageX==1.5

packageXBu durumu idare etmek için birden çok pip sürümünü nasıl kurabilirim ?


2
paketleri standart olmayan konumlara yükleyin, ardından hangisinin içe aktarılacağını belirlemek için PYTHONPATH kullanın; bkz bu cevabı
Yibo Yang

1
Bir yan not olarak, bu sorudaki senaryo ve halihazırda kabul edilen cevaptaki hileli çözüm, bir paket sahibinin bağımlılıklarının tam bir sürümünü sabitlemek için neden seçici olmaması ve seçmemesi gerektiğinin iyi bir örneğidir. Kullanmaları gerekirdi packageX>=1.3,<2ve packageX>=1.4,<2(yukarı akış packageX'in Anlamsal Sürümlemeyi takip ettiğini varsayarak ), o zaman aşağı akış uygulama geliştiricisi olarak sabitlemek ve kullanmak için hiçbir sorun yaşamazsınız packageX==1.5ve herkes mutlu olur. Daha fazla ayrıntı burada
RayLuo

Yanıtlar:


65

pip bu konuda sana yardım etmeyecek.

Belirli bir sürümü yüklemesini söyleyebilirsiniz, ancak diğerini geçersiz kılacaktır. Öte yandan, iki sanal ortam kullanmak, her iki sürümü de aynı makineye kurmanıza izin verir, ancak aynı anda kullanmaz.

En iyisi, her iki sürümü de Python yolunuza farklı bir adla yerleştirerek manuel olarak kurmaktır.

Ancak, eğer iki kütüphaneniz onlardan aynı isme sahip olmalarını bekliyorsa (ve olmalılar), bunları değiştirmeniz gerekecektir, böylece ihtiyaç duydukları sürümü aşağıdaki gibi bazı içe aktarma takma adlarıyla alabilirler:

import dependencyname_version as dependencyname

Şu anda bunu yapmanın temiz bir yolu yok. Umut edebileceğiniz en iyi şey, bu hacklemenin işe yaramasıdır.

İki kitaplıktan birini atmayı ve bir eşdeğeriyle değiştirmeyi ya da bağımlılığın yeni sürümünü kabul etmek ve yamayı topluluğa geri vermek için yamayı tercih ederim.


43
Buna hala bir çözüm yok mu?
Håken Lid

2
Hala çözüm yok mu?
AjaxLeung

1
Pek çok dilde bu sorun var ... Java, Go, Haxe ... umarız dil tasarımcıları global paket ad alanlarını terk eder ve gelecekte oluşturacakları dillerde daha Node.js benzeri bir modül sistemi benimser, çünkü Node.js, bağımlılıklar.
Andy

15

Ea için kaynağı indirin. paketi. Her birini kendi ayrı klasörüne yükleyin. Örneğin. Sürüm 1.10 paketim vardı, ancak bazı işler için geliştirici sürümüne geçmek istedim. Ben dev modülü için kaynak indirildi git clone https://github.com/networkx/networkx.git cd netwokrx Ben bu sürümü için bir klasör oluşturdu: mkdir /home/username/opt/pythono zaman ben hiç PYTHONPATH env Var ayarlayın: export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/. Sonra, şunu kullanarak kurdum:python setup.py install --prefix=/home/username/opt/python

Şimdi, PYTHONPATH'ım şu anda bu diğer site paketleri klasörünü işaret ettiğinden, komut satırında python çalıştırdığımda ve yeni modülü içe aktardığımda çalışıyor. Geri geçiş yapmak için yeni klasörü PYTHONPATH'tan kaldırın.

>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'

2
Hah, buraya özellikle networkxsürüm farklılıklarıyla mücadele ettiğim için geldim !
dwanderson

"Geri geçiş yapmak için, yeni klasörü PYTHONPATH'tan kaldırın.", Yeni klasör yolunu kaldırdıktan sonra bile bu bölüm benim için çalışmıyorsys.path
Avinash Raj
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.