根据实现(PyPy / CPython 支持)在 setup.py 脚本中指定额外的依赖项
Specifying additional dependencies in setup.py script based on implementation (PyPy / CPython support)
前言
我有一个包含 PyPy support and for 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 创建 source distribution 时,比如
> python setup.py sdist
并尝试通过 PyPy 安装它
> pypy3 -m pip install path/to/package.tar.gz
它尝试安装 mypy
(并且由于 mypy
使用特定于 CPython 的软件包而失败),因此看起来依赖于 CPython 版本(为其创建了分发版)。
问题
我如何指定依赖项并创建一次源分发,以便它适用于 CPython 和 PyPy 版本(并随后上传到 PyPI)?
您当前的脚本在构建时而不是在安装时测试平台。
您需要使用的不是platform
模块,而是PEP 508:
中定义的环境标记
from setuptools import setup
...
install_requires = [...,
'mypy>=0.630; implementation_name != "PyPy"']
setup(...,
install_requires=install_requires)
参考文献:
- install_requires based on python version
- Building and Distributing Packages with Setuptools — setuptools 40.5.0 documentation
前言
我有一个包含 PyPy support and for 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 创建 source distribution 时,比如
> python setup.py sdist
并尝试通过 PyPy 安装它
> pypy3 -m pip install path/to/package.tar.gz
它尝试安装 mypy
(并且由于 mypy
使用特定于 CPython 的软件包而失败),因此看起来依赖于 CPython 版本(为其创建了分发版)。
问题
我如何指定依赖项并创建一次源分发,以便它适用于 CPython 和 PyPy 版本(并随后上传到 PyPI)?
您当前的脚本在构建时而不是在安装时测试平台。
您需要使用的不是platform
模块,而是PEP 508:
from setuptools import setup
...
install_requires = [...,
'mypy>=0.630; implementation_name != "PyPy"']
setup(...,
install_requires=install_requires)
参考文献:
- install_requires based on python version
- Building and Distributing Packages with Setuptools — setuptools 40.5.0 documentation