在 setup.cfg 中正确使用 PEP 508 环境标记
Correct use of PEP 508 environment markers in setup.cfg
我正在尝试通过指定仅对特定 OS 有意义的依赖项来利用 PEP 496 -- Environment Markers and PEP 508 -- Dependency specification for Python Software Packages。
我的 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')
我正在尝试通过指定仅对特定 OS 有意义的依赖项来利用 PEP 496 -- Environment Markers and PEP 508 -- Dependency specification for Python Software Packages。
我的 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')