我有一个包 (Skype4Py),它根据操作系统具有不同的依赖关系。这是因为它依靠操作系统消息传递总线将自己绑定(bind)到 Skype。
在 Python 包(即 setup.py)中声明操作系统特定依赖项的正确方法是什么?
最佳答案
对我最初留下的评论进行了一些扩展,回复建议的内容是明智的。我认为没有明确的指南来说明应该采取什么做法,但实际上,setup.py
文件的要点之一是为运行该安装的代理获取正确的依赖项脚本,然后以正确的方式正确安装包,通常只会运行一次,直到需要重新安装时才会被遗忘。也就是说,使它更整洁是有意义的,所以这就是我要做的。
如果您的包只需要一组额外的 posix
系统依赖项,我会在 setup.py
文件顶部附近声明类似这样的内容
system_spec_requires = {
'posix': ['dbus', 'gobjects',],
# ... if others are needed
}
然后像这样声明任何硬性要求:
requires = [
# just random examples
'requests',
'requests-oauthlib',
# ... and more
]
然后通过将特定于系统的需求附加到需求来构建完整的需求列表
import os # assuming you haven't already done that
requires.extend(system_spec_requires.get(os.name, []))
最后,在 setup.py
中调用 setup
的适当部分:
setup(
...
requires=requires,
...
)
顶部的 system_spec_requires
字典使它看起来像是某种系统特定要求的 list ,我的意思是它看起来尽可能清楚。确实,我已经看到了更糟糕的 setup.py
文件,但如果它正确地完成了工作(即安装包及其依赖项)(尤其是不要以恶意方式破坏我的系统,但你可能会在某处以 .decode('base64')
结尾的字符串上发现 eval
……对吧?)我真的不在乎它看起来有多糟糕。
关于python - 在 setup.py 中声明特定于 Linux 的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25302504/