在setup.cfg

时间:2017-07-03 05:37:56

标签: python python-3.x setuptools python-packaging

我试图通过指定仅对特定操作系统有意义的依赖关系来使用PEP 496 -- Environment MarkersPEP 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'"

我想它不会有分号。但是我该如何使用环境标记呢?

1 个答案:

答案 0 :(得分:3)

一个角色。那就是你所遗忘的一切。您有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 import read_configuration

conf_dict = read_configuration('/home/user/dev/package/setup.cfg')

More setup.cfg info