Может ли пакет Python зависеть от конкретной версии управления версиями другого пакета Python?

StackOverflow https://stackoverflow.com/questions/2087492

Вопрос

Некоторые полезные пакеты Python не работают в pypi, и единственной приемлемой версией является определенная версия в системе контроля версий.Можно ли это выразить в setup.py например

requires = 'svn://example.org/useful.package/trunk@1234' ?

Это было полезно?

Решение

Вам нужно сделать две вещи.Сначала укажите нужную вам версию, например:

install_requires = "useful.package==1.9dev-r1234"

а затем включите dependency_links настройка, указывающая, где ее найти:

dependency_links = ["svn://example.org/useful.package/trunk@1234#egg=useful.package-1.9dev-r1234"]

Обратите внимание, что версия #egg= часть dependency_links URL должен точно соответствует тому, что вы указали в install_requires;это то, что связывает две части вместе.

Происходит следующее: setuptools видит тег #egg в ссылке и сохраняет URL-адрес как доступный URL-адрес загрузки для этой конкретной версии пакета.Затем, когда позже он попытается удовлетворить это требование, он должен загрузить этот точный URL-адрес SVN.

(Однако обратите внимание, что для этого Действительно работа, целевая версия SVN должна фактически создать яйцо с этим именем и версией.В противном случае ваша зависимость потерпит неудачу во время выполнения!Таким образом, это действительно работает только в том случае, если пакет, от которого вы зависите, использует теги ревизии SVN в номерах версий сборки по умолчанию.)

Другие советы

Если вам действительно нужна малоизвестная версия другого пакета и нет возможности обойтись другими версиями, вы можете просто распространить эту версию пакета вместе со своей собственной.При необходимости поместите его в свое собственное пространство имен, чтобы убедиться, что используется именно ваша версия.

Я не понял, как на это ссылаться setup.py но pip можно проверить конкретные версии пакетов Python с помощью простого файла требований.С файлом требований под названием requires.txt, pip install -r requires.txt установит все пакеты, перечисленные в этом файле (и их зависимости).

Вот часть моего файла требований.Строки, начинающиеся с -e проверьте конкретные версии пакетов из системы контроля версий (git, svn или mercurial), включая мой проект, и установите их в редактируемой форме. pip freeze выводит список всех установленных пакетов в этом формате.

requires.txt:

-e hg+file:///home/me/my-private-project#egg=myproject
-e hg+http://bitbucket.org/ianb/webob@tip#egg=WebOb
-e svn+http://svn.sqlalchemy.org/sqlalchemy/trunk@6638#egg=SQLAlchemy
-e svn+http://svn.zope.org/repos/main/z3c.saconfig/trunk@106508#egg=z3c.saconfig
## The following requirements were added by pip --freeze:
APScheduler==1.01
simplejson==2.0.9
... (many more)

Вы можете выпускать пакеты определенных версий, но распространять их придется вместе.Невозможно автоматически загрузить их с помощью стандартного Python.

Однако вы можете использовать Buildout и создать buildout.cfg, который позволит реплицировать среду.Он может извлекать и устанавливать определенные версии, если вы используете такие расширения, как mr.developer.

http://pypi.python.org/pypi/zc.buildout http://pypi.python.org/pypi/mr.developer

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top