Некоторые полезные пакеты 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 =
является частью URL dependency_links
должен точно соответствовать тому, что вы указали в install_requires
; это то, что связывает две части вместе.
Случается, что setuptools видит тег #egg в ссылке и сохраняет URL-адрес как доступный URL-адрес загрузки для этой конкретной версии пакета. Затем, когда он попытается решить это требование позже, он должен загрузить этот точный URL-адрес SVN.
(Обратите внимание, однако, что для того, чтобы это действительно работало , целевая ревизия SVN должна фактически создать яйцо с этим именем и версией. В противном случае ваша зависимость выйдет из строя во время выполнения! Итак, это действительно работает только в том случае, если пакет, от которого вы зависите, использует теги ревизий SVN в своих номерах версий сборки по умолчанию.)
Вы можете выпускать пакеты определенных версий, но вы должны распространять их вместе. Нет способа автоматически загрузить их со стандартным Python.
Однако, вы можете использовать Buildout и создать buildout.cfg, который позволит реплицировать окружение. Он может извлекать и устанавливать определённые ревизии, если вы используете расширения типа mr.developer.
http://pypi.python.org/pypi/zc.buildout http://pypi.python.org/pypi/mr.developer
Если вам действительно требуется непонятная версия другого пакета, и нет никакого способа сделать с другими версиями, вы можете просто распространять эту версию пакета своей собственной. При необходимости поместите его в свое пространство имен, чтобы убедиться, что ваша версия используется.
Я не разобрался, как ссылаться на это из 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)