在buildout.cfg中指定优先级以获取egg包
我在想,有没有办法先指定从哪里获取包,而不是直接去 pypi.python.org/ 上找。
举个例子:
[buildout]
find-links:
/home/eggs/
eggs =
foo
bar
如果在 pypi 上有一个叫 foo
或者 bar
的包,它的版本号比我在 /home/eggs/
目录下的 foo
包要高,buildout 就会试图从 pypi 下载这个包。可是我自己这个 foo
和 pypi 上的 foo
是完全不同的,这就成了一个问题。
我找不到使用命名空间或者类似的东西,所以我想应该有办法强制 buildout 使用某些特定的包,而不是其他的。
有没有什么办法可以解决这个问题呢?
谢谢,
马丁
1 个回答
你应该把你的“蛋”(这里指的是软件包)固定到特定的版本,这样每次运行构建时,你都能控制使用哪些“蛋”:
[buildout]
versions = versions
[versions]
foo = 1.0
bar = 1.1
spam = 1.0b2
在 [buildout]
部分的 versions
选项中,你可以指定一个包含你软件包版本固定信息的部分。在这个例子中,我把这个部分命名为 [versions]
,但你可以随便取个名字;比如可以想象有 [release1]
和 [release2]
这两个部分,versions
选项可以指向其中一个,以选择特定的版本组合。
当一个“蛋”被固定到某个特定版本时,只有这个版本的“蛋”才能满足这个构建的要求。如果你的链接指向一个包含该版本的地方,那么这个“蛋”就会从那里下载,而不是从PyPI(Python的包管理网站)下载。
还有两个构建功能可以帮助管理版本固定。第一个是一个默认的构建选项,叫做 allow-picked-versions
:
[buildout]
allow-picked-versions = false
默认设置是 true
,这意味着构建可以为你选择一个满足所有要求的版本。如果你把这个设置为 false
,那么对于任何没有版本固定的“蛋”,构建会报错。你可以用这个来检查是否还有“蛋”需要固定版本。
另一个选项是使用 buildout.dumppickedversions 扩展来增强构建:
[buildout]
extensions = buildout.dumppickedversions
当你把它添加到你的构建中时,每次运行构建时,最后会列出一个未固定版本的“蛋”的版本列表,这个列表的格式可以直接用在你的构建配置中。这样,你可以让构建找出要使用哪些“蛋”,然后再把它们固定到那些版本。