如何在setup.py(以及必需的C库)中声明对gi.repository的依赖?

时间:2014-02-05 15:46:36

标签: python setuptools gobject-introspection

我正在打包一个python应用程序,它通过gobject内省依赖于几个C库。我想确保至少安装了glib中的python模块(即gi模块,在Debian中打包为python-gi,我不是在谈论已弃用的PyGObject模块)。将其添加为常规依赖项会导致安装失败,因为它不在Pypi中。

我该如何申报?我看了一下setuptool doc,但是我看不出任何诀窍。

感谢。

相关问题:

1 个答案:

答案 0 :(得分:2)

您不能使用setuptools(AFAIK,即......)指定非Python依赖项。

install_requires的{​​{1}}个关键字只能指定Python样式的依赖关系;它针对Python打包基础架构。 Python风格的安装程序( pip easy_install python setup.py install )将使用查找和解析Python的策略来解决此类依赖关系仅限样式包。其中一个策略是使用像PyPI这样的包索引。

如果你想创建一个具有Debian风格依赖关系的软件包,这些软件包由Debian风格的安装程序解决,使用Debian软件包repos,你必须创建一个Debian软件包。有些工具支持从Python项目创建Debian软件包,例如easydebstdeb。但是,大多数人建议超越英里并明确创建Debian软件包。

在一般情况下,通过PyPI打包和分发Python项目应该是可行的方法。它是独立的平台和发行版,可以与特定于Python的安装程序(如 pip )和 virtualenv buildout 等工具很好地配合使用。对PyGI具有依赖性将涉及向用户记录该事实,例如, the pydbus packages在自述文件中执行:

  

它基于PyGI,Python GObject Introspection绑定,它   是推荐使用Python的GLib的方法。不幸的是,PyGI是   没有打包在pypi上,所以你需要从你的安装它   发行版的存储库(通常称为python-gi,python-gobject或   pygobject3)。

从PyGI导入时,您的项目也可能是防御性的,当导入失败时,会向用户显示一条易消息的错误消息,例如“请sudo apt-get install python-gi”等。