构建:使用系统Python的依赖项

时间:2011-08-29 20:29:08

标签: python dbus buildout pygobject

我正在尝试将buildout用于Python包,使用时,它取决于2个扩展模块:dbus-pythonpygobject。这两个模块都使构建失败: 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的使用环境。

4 个答案:

答案 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
相关问题