我正在尝试利用PEP 496 -- 环境标记 and PEP 508——Python 软件包的依赖规范通过指定仅在特定操作系统上有意义的依赖关系。
My setup.py
看起来像这样:
import setuptools
assert setuptools.__version__ >= '36.0'
setuptools.setup()
我的最小setup.cfg
看起来像这样:
[metadata]
name = foobar
version = 1.6.5+0.1.0
[options]
packages = find:
install_requires =
ham >= 0.1.0
eggs >= 8.1.2
spam >= 1.2.3; platform_system=="Darwin"
i-love-spam >= 1.2.0; platform_system="Darwin"
但是,当尝试使用以下命令安装这样的软件包时pip install -e foobar/
,失败并显示:
pip._vendor.pkg_resources.RequirementParseError: Invalid requirement, parse error at "'; platfo'"
我猜想那里不会有分号。但是我应该如何使用环境标记呢?
一个字符。这就是你所缺少的。你有过platform_system="Darwin"
代替platform_system=="Darwin"
(你的最后一行install_requires
)。这样就可以正常工作:
[metadata]
name = foobar
version = 1.6.5+0.1.0
[options]
packages = find:
install_requires =
ham >= 0.1.0
eggs >= 8.1.2
spam >= 1.2.3; platform_system=="Darwin"
i-love-spam >= 1.2.0; platform_system=="Darwin"
这不是必需的,但你的setup.py
也可以简化。
import setuptools
setup(setup_requires=['setuptools>=36.0'])
与之前的评论不同,我喜欢使用setup.cfg
。它干净又简单。如果您想使用来自setup.cfg
在运行时,很容易解析:
from setuptools.config.setupcfg import read_configuration
conf_dict = read_configuration('/home/user/dev/package/setup.cfg')
更多 setup.cfg 信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)