一些有用的 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 网址必须 确切地 匹配您指定的内容 install_requires;这就是将这两部分联系在一起的原因。

发生的情况是,setuptools 会看到链接上的 #egg 标记,并将该 URL 保存为该包的精确版本的可用下载 URL。然后,当它稍后尝试解决该要求时,它应该下载该精确的 SVN URL。

(但请注意,为此 真的 工作中,目标 SVN 修订版必须实际构建一个具有该名称和版本的 Egg。否则,您的依赖将在运行时失败!因此,只有当您所依赖的包在其默认构建版本号中使用 SVN 修订标签时,这才真正有效。)

其他提示

如果您确实需要另一个软件包的模糊版本,并且无法使用其他版本,那么您可能只想简单地将该版本的软件包与您自己的软件包一起分发。如有必要,请将其放在您自己的命名空间中,以确保您的版本是所使用的版本。

我还没弄清楚如何引用它 setup.pypip 可以通过简单的需求文件查看 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