前言
我有一个支持PyPy的包,对于CPython用户,它有mypy
作为额外的依赖项,我将其指定为
import platform
from setuptools import setup
...
install_requires = [...]
if platform.python_implementation() != 'PyPy':
install_requires.append('mypy>=0.630')
setup(...,
install_requires=install_requires)
在本地它运行良好,但当我通过类似的CPython创建源分发时
> python setup.py sdist
并尝试通过PyPy 安装
> pypy3 -m pip install path/to/package.tar.gz
它试图安装mypy
(但由于mypy
使用CPython特定的包而失败(,因此看起来依赖关系是针对CPython版本(为其创建了分发版(。
问题
我如何指定依赖项并创建一次源分发,以便它对CPython&PyPy版本(然后上传到PyPI(?
当前脚本在构建时测试平台,而不是在安装时测试。
您需要使用的不是platform
模块,而是PEP508:中定义的环境标记
from setuptools import setup
...
install_requires = [...,
'mypy>=0.630; implementation_name != "PyPy"']
setup(...,
install_requires=install_requires)
参考文献:
- install_requires基于python版本
- 使用Setuptools构建和分发软件包——Setuptools 40.5.0文档