Подтвердить что ты не робот

Install_requires на основе версии python

У меня есть модуль, который работает как на python 2, так и на python 3. В Python < 3.2 я хотел бы установить конкретный пакет в качестве зависимости. Для Python >= 3.2.

Что-то вроде:

 install_requires=[
    "threadpool >= 1.2.7 if python_version < 3.2.0",
 ],

Как это можно сделать?

4b9b3361

Ответ 1

setuptools поддерживает эту функцию с помощью маркеров среды.

install_requires=[
    'enum34;python_version<"3.4"',
    'pywin32 >= 1.0;platform_system=="Windows"'
]

Использование этого подробно описано в официальной документации . На основе журнала изменений был добавлен в v20.5, но реализация была нестабильной до v20.8.1 (это был всего лишь разрыв 15 дней).


Оригинальный ответ (по-прежнему действителен, но может быть устаревшим в будущем):

setuptools имеет поддержку этого использования в аргументе extras_require.

Формат выглядит следующим образом:

extras_require={
    ':python_version=="2.7"': ["mock"],
},

Он будет поддерживать другие операторы сравнения.


К сожалению, он не упоминается в документации . При поиске ответов я нашел PEP-426, говорящий о "маркерах окружающей среды". С этой фразой мне удалось найти файл setuptools со следующим комментарием:

Я успешно использовал функцию маркеров для выборочного и декларативного запроса зависимости. См. backports.unittest_mock для примера. Через "дополнительные функции" требуется mock, но только на Python 2. Когда я могу положиться на Setuptools 17.1, я могу изменить эту зависимость на python_version < "3.3".

Ответ 2

Об этом говорилось здесь, было бы полезно, чтобы проверить версию Python внутри вашего setup.py с помощью sys.version_info;

import sys

if sys.version_info >= (3,2):
    install_requires = ["threadpool >= 1.2.7"]
else:
    install_requires = ["threadpool >= 1.2.3"]

setup(..., install_requires=install_requires)