установите пакеты в нестандартные местоположения, затем используйте PYTHONPATH, чтобы определить, какой из них импортировать; см. этот ответ
Ибо Ян
1
С другой стороны, сценарий в этом вопросе и хакерское решение в принятом в настоящее время ответе являются хорошим примером того, почему владелец пакета не должен и не должен быть разборчивым, чтобы закрепить точную версию своей зависимости. Они должны были использовать packageX>=1.3,<2и packageX>=1.4,<2(при условии, что восходящий пакет X следует семантическому управлению версиями ), тогда у вас, как у разработчика приложений нижнего уровня, не будет проблем с закреплением и использованием, packageX==1.5и все будут счастливы. Подробнее здесь
RayLuo
Ответы:
65
pip вам в этом не поможет.
Вы можете указать ему установить определенную версию, но она заменит другую. С другой стороны, использование двух виртуальных машин позволит вам установить обе версии на одном компьютере, но не использовать их одновременно.
Лучше всего установить обе версии вручную, поместив их в свой путь Python с другим именем.
Но если две ваши библиотеки ожидают, что у них будет одно и то же имя (а они должны), вам придется изменить их, чтобы они выбирали нужную им версию с некоторым псевдонимом импорта, например:
import dependencyname_version as dependencyname
В настоящее время нет чистого способа сделать это. Лучшее, на что вы можете надеяться, - это то, что этот взлом сработает.
Я бы предпочел отказаться от одной из двух библиотек и заменить ее эквивалентом или исправить ее, чтобы принять новую версию зависимости и вернуть исправление сообществу.
У многих языков есть эта проблема ... Java, Go, Haxe ... надеюсь, разработчики языков откажутся от глобальных пространств имен пакетов и примут модульную систему, больше похожую на Node.js, в создаваемые ими языки в будущем, поскольку Node.js поддерживает несколько версий зависимости.
Энди
15
Загрузите исходный код для ea. пакет. Устанавливайте каждый в свою отдельную папку. Например. У меня был пакет версии 1.10, но я хотел переключиться на версию для разработчиков для некоторой работы. Я скачал исходники модуля Dev:
git clone https://github.com/networkx/networkx.gitcd netwokrx
Я создал папку для этой версии:
mkdir /home/username/opt/python, то я поставил PYTHONPATH ENV вар в: 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'
Ха, я пришел сюда специально, потому что я борюсь с networkxразличиями версий!
dwanderson
«Чтобы переключить переключатель обратно, удалите новую папку из PYTHONPATH.», Эта часть не работает для меня даже после удаления пути к новой папке изsys.path
packageX>=1.3,<2
иpackageX>=1.4,<2
(при условии, что восходящий пакет X следует семантическому управлению версиями ), тогда у вас, как у разработчика приложений нижнего уровня, не будет проблем с закреплением и использованием,packageX==1.5
и все будут счастливы. Подробнее здесьОтветы:
pip вам в этом не поможет.
Вы можете указать ему установить определенную версию, но она заменит другую. С другой стороны, использование двух виртуальных машин позволит вам установить обе версии на одном компьютере, но не использовать их одновременно.
Лучше всего установить обе версии вручную, поместив их в свой путь Python с другим именем.
Но если две ваши библиотеки ожидают, что у них будет одно и то же имя (а они должны), вам придется изменить их, чтобы они выбирали нужную им версию с некоторым псевдонимом импорта, например:
import dependencyname_version as dependencyname
В настоящее время нет чистого способа сделать это. Лучшее, на что вы можете надеяться, - это то, что этот взлом сработает.
Я бы предпочел отказаться от одной из двух библиотек и заменить ее эквивалентом или исправить ее, чтобы принять новую версию зависимости и вернуть исправление сообществу.
источник
Загрузите исходный код для ea. пакет. Устанавливайте каждый в свою отдельную папку. Например. У меня был пакет версии 1.10, но я хотел переключиться на версию для разработчиков для некоторой работы. Я скачал исходники модуля Dev:
git clone https://github.com/networkx/networkx.git
cd netwokrx
Я создал папку для этой версии:mkdir /home/username/opt/python
, то я поставил PYTHONPATH ENV вар в: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'
источник
networkx
различиями версий!sys.path