Указание дополнительных зависимостей в скрипте setup.py на основе реализации Python
Предисловие
У меня есть пакет с поддержкой 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)?
1 ответ
Ваш текущий скрипт тестирует платформу во время сборки, а не во время установки.
То, что вам нужно использовать, это не platform
модуль, но маркеры среды, определенные в PEP 508:
from setuptools import setup
...
install_requires = [...,
'mypy>=0.630; implementation_name != "PyPy"']
setup(...,
install_requires=install_requires)
Рекомендации: