tor*_*gen 5 python setuptools python-3.x python-packaging
我试图通过指定仅在特定OS上有意义的依赖项来利用PEP 496-环境标记和PEP 508-Python软件包的依赖项规范。
我的setup.py样子是这样的:
import setuptools
assert setuptools.__version__ >= '36.0'
setuptools.setup()
Run Code Online (Sandbox Code Playgroud)
我的最小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"
Run Code Online (Sandbox Code Playgroud)
但是,当尝试使用安装此类软件包时pip install -e foobar/,它将失败并显示:
pip._vendor.pkg_resources.RequirementParseError: Invalid requirement, parse error at "'; platfo'"
Run Code Online (Sandbox Code Playgroud)
我猜这里不希望有分号。但是我应该如何使用环境标记?
一个字符。这就是你所缺少的。你有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"
Run Code Online (Sandbox Code Playgroud)
这不是必需的,但您setup.py也可以简化。
import setuptools
setup(setup_requires=['setuptools>=36.0'])
Run Code Online (Sandbox Code Playgroud)
与之前评论的人不同,我喜欢使用setup.cfg. 它干净而简单。如果你想setup.cfg在运行时使用信息,很容易解析:
from setuptools.config import read_configuration
conf_dict = read_configuration('/home/user/dev/package/setup.cfg')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |