【发布时间】:2021-04-26 06:29:07
【问题描述】:
我根据 PEP-517 使用 pyproject.toml 和 setup.cfg。
我的setup.cfg 如下:
[metadata]
name = Package
version = 1.0.0
[options]
py_modules = ...
python_requires = >=3
我希望将包限制为仅在 CPython 上运行,因为它解决了特定于实现的问题。
我尝试过使用环境标记,但不幸的是它们不适用于python_requires 字段:
python_requires = >=3; implementation_name == "cpython"
有什么方法可以在不使用已弃用的setup.py 的情况下实现我的愿望?
【问题讨论】:
-
你可以尝试像
install-requires=this-package-requires-cpython;implementation_name != "cpython"这样的hack -
是的,我想过使用那个 hack。虽然不喜欢。我想知道是否有真正的方法来做到这一点。
-
如果你正在构建一个轮子,你可以在兼容性标签中限制实现,例如
python setup.py bdist_wheel --python-tag=cp3将生成一个<pkg>-<ver>-cp3-none-any.whl,它只会与 CPython impl 一起安装。对于源分布,恐怕您将不得不在setup.py脚本中进行手动检查。 -
@hoefling 感谢您的提示,但为了使用
bdist_wheel,我仍然需要setup.py(这是您命令行的一部分)。我尝试使用pip wheel --build-option python-tag=cp3 .运行构建选项,但 PEP 517 构建似乎不支持它。我想答案是暂时是不可能的。 -
我的错,没有正确阅读您的问题。使用
setup.cfg更容易管理;只需添加带有python-tag=cp3条目的[bdist_wheel]部分。如果setup.cfg包含在源 dist 中并在pip installing 时用于构建轮子,这也可能会解决 sdist 的情况;不确定,因为我不知道如何从 PEP 517 声明性配置构建 sdist。
标签: python setuptools python-packaging