В моем приложении я хотел бы использовать:
-
packageA
, для которого требуетсяpackageX==1.3
-
packageB
, для которого требуетсяpackageX==1.4
-
packageX==1.5
Как я могу установить несколько версий packageX
с pip для обработки этой ситуации?
В моем приложении я хотел бы использовать:
packageA
, для которого требуется packageX==1.3
packageB
, для которого требуется packageX==1.4
packageX==1.5
Как я могу установить несколько версий packageX
с pip для обработки этой ситуации?
pip вам не поможет.
Вы можете сказать ему, чтобы установить определенную версию, но она переопределит другую. С другой стороны, использование двух virtualenvs позволит вам устанавливать обе версии на одном компьютере, но не использовать их одновременно.
Лучше всего установить обе версии вручную, поместив их в свой путь Python с другим именем.
Но если ваши две библиотеки ожидают, что они будут иметь одно и то же имя (и они должны), вам придется изменить их, чтобы они подбирали нужную версию с некоторым псевдонимом импорта, например:
import dependencyname_version as dependencyname
В настоящее время нет чистого способа сделать это. Самое лучшее, на что вы можете надеяться, - это заставить этот хак работать.
Я предпочел бы вырезать одну из двух библиотек и заменить ее эквивалентом или исправить ее, чтобы принять новую версию зависимостей и вернуть патч сообществу.
Загрузите источник для ea. пакет. Установите их в отдельной папке. Например. У меня был пакет версии 1.10, но мне хотелось перейти на версию dev для некоторой работы. Я загрузил источник для модуля dev:
git clone https://github.com/networkx/networkx.git
cd netowkrx
Я создал папку для этой версии:
mkdir /home/username/opt/python
, тогда я устанавливаю значение PYTHONPATH env var: export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/
. Затем я установил его, используя: python setup.py install --prefix=/home/username/opt/python
Теперь, поскольку мой PYTHONPATH теперь указывает на эту другую папку сайтов-пакетов, когда я запускаю python в командной строке и импортирую новый модуль, он работает. Чтобы переключиться обратно, удалите новую папку из PYTHONPATH.
>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'