Указание дополнительных зависимостей в скрипте setup.py на основе реализации (поддержка PyPy / CPython) - PullRequest
0 голосов
/ 07 ноября 2018

Введение

У меня есть пакет с поддержкой 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 Ответ

0 голосов
/ 07 ноября 2018

Ваш текущий скрипт тестирует платформу во время сборки, а не во время установки.

Вам нужно использовать не модуль platform, а маркеры среды , определенные в PEP 508 :

from setuptools import setup
...
install_requires = [...,
                    'mypy>=0.630; implementation_name != "PyPy"']
setup(...,
      install_requires=install_requires)

Ссылки:

...