我正在尝试将buildout用于Python包,使用时,它取决于2个扩展模块:dbus-python和pygobject。这两个模块都使构建失败: dbus-python 缺少setup.py
文件,而pygobject
有一个但不鼓励使用 - 而是 configure,make,make install 应该使用。因此,buildout无法在开发环境中设置这些依赖项。
这是我的buildout.cfg
:
[buildout]
develop = .
parts = eggs
[python]
recipe = zc.recipe.eggs
interpreter = python
eggs = foobar
setup.py
包的foobar
包含:
install_requires=['dbus-python', 'pygobject'],
在寻找解决方案时,我偶然发现了食谱z3c.recipe.scripts
及其ability to utilize system-wide installed eggs。但是,当应用于我的buildout.cfg
..
[python]
recipe = z3c.recipe.scripts
include-site-packages = true
allowed-eggs-from-site-packages = pygobject, dbus-python
interpreter = python
eggs = foobar
..它似乎没有效果(仍然失败),虽然两个软件包( dbus , gobject )都安装在我的系统Python中。删除allowed-eggs..
行时也是如此。
我的问题:我在概念层面上遇到了什么问题,或者我的buildout.cfg
中是否有错误?
我知道有zc.recipe.cmmi
,一个使用 configure,make,make install 安装鸡蛋的食谱。但是,在我的情况下,简单地引用系统Python egg就足够了。我不需要buildout生成的100%可重现的环境。此外,默认情况下, dbus-python 和 pygobject 安装在大多数Linux桌面系统上,即foobar
的使用环境。
答案 0 :(得分:3)
我还没有获得最新的1.5.x版本来使用系统包。有一种方法:固定版本。这样,zc.buildout 1.5.x就会把它拿起来。
[buildout]
...
versions = versions
[versions]
pygobject = 1.2.3
或者,我所做的,你可以使用旧的1.4.4 buildout(你需要一个特殊的bootstrap.py,google)和osc.recipe.sysegg。
[buildout]
...
parts =
...
sysegg
[sysegg]
recipe = osc.recipe.sysegg
force-sysegg = true
eggs =
dbus-python
pygobject
我个人会选择osc.recipe.sysegg解决方案,因为这是可靠的。
答案 1 :(得分:2)
您可能希望为每个性能较差的python发行版使用CMMI部分,并使用extra-paths
部分的python
选项来确保CMMI部分包含在python路径中。< / p>
答案 2 :(得分:1)
感谢@ Rainout的回答和评论,我找到了问题的实际来源。问题不在buildout或我的配置中,而是在DBus和Gobject的Python绑定中:这些包不是作为egg分发,而是作为普通包发布。
因此虽然可以通过PyPI检索这些包,但它们不能用于任何希望Python包以 eggs 发布的基础结构中。实际上,这意味着这些包的依赖关系不能列在setup.py
中,而是需要以其他方式处理(如果有的话)。
答案 3 :(得分:0)
我发现这样做的最好方法是将include-site-packages设置为true,然后使用mockedeggs recipe来设置setuptools,使其认为在安装过程中鸡蛋可用。唯一的缺点是你无法控制从网站包中使用的内容;你可以将allowed-eggs-from-site-packages设置为空白以阻止使用鸡蛋,但所有包都可用。无论如何,这是我的扩建的一个片段:
[buildout]
parts =
mockedeggs
myapp
include-site-packages = true
allowed-eggs-from-site-packages =
[myapp]
recipe = z3c.recipe.scripts
eggs = ${buildout:eggs}
[mockedeggs]
recipe = collective.recipe.mockedeggs
mocked-eggs =
mapnik2 = 2.0