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

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

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

10
задан joeforker 18 January 2010 в 16:25
поделиться

4 ответа

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

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 = является частью URL dependency_links должен точно соответствовать тому, что вы указали в install_requires ; это то, что связывает две части вместе.

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

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

12
ответ дан 3 December 2019 в 21:21
поделиться

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

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

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

1
ответ дан 3 December 2019 в 21:21
поделиться

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

2
ответ дан 3 December 2019 в 21:21
поделиться

Я не разобрался, как ссылаться на это из Setup.py , но PIP может проверить конкретные изменения пакетов Python с простыми требованиями файла. С помощью файла требований требуется TRUNCE.TXT , PIP Установка -R Trance.txt установит все пакеты, перечисленные в этом файле (и их зависимостях).

Вот часть моего файла требований. Линии, начинающиеся с -E , проверьте определенные изменения пакетов из элемента управления версиями (GIT, SVN или Mercurial), включая мой проект, и установить их в редактируемой форме. PIP Freeze перечислены все установленные пакеты в этом формате.

TRUNCE.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)
2
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: