Указание дополнительных зависимостей в скрипте 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)

Рекомендации:

Другие вопросы по тегам