根据实现在setup.py脚本中指定额外的依赖项(PyPy/CPyson支持)



前言

我有一个支持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文档

相关内容

  • 没有找到相关文章

最新更新