requirements.txt залежно від версії python


89

Я намагаюся перенести пакет python2 на python3 (не мій власний), використовуючи шість, щоб він був сумісним з обома. Однак один із пакунків, перелічених у вимогах.txt, тепер включений до python3 stdlib, і версія pypi не працює в python3, тому я хочу умовно виключити його. Зробити це в setup.py легко, я можу просто зробити щось на зразок:

if sys.version_info[0] == 2:
    requirements += py2_requirements
else:
    requirements += py3_requirements

Але я хотів би, щоб requirements.txt також відображав правильний список. Я не можу знайти нічого про це в документації pip. так чи хтось знає, як це зробити, або якщо це взагалі можливо?


1
Будь ласка, змініть прийняту відповідь на stackoverflow.com/a/33451105/99834 - що, безсумнівно, є правильним способом реалізації цього.
сорін

Відповіді:


133

Ви можете використовувати маркери середовища для досягнення цього, requirements.txtоскільки pip 6.0:

SomeProject==5.4; python_version < '2.7'
SomeProject; sys_platform == 'win32'

Це також підтримується setuptools, оголосивши додаткові вимоги в setup.py:

setup(
    ...
    install_requires=[
        'six',
        'humanize',
    ],
    extras_require={
        ':python_version == "2.7"': [
            'ipaddress',
        ],
    },
)

Див. Також специфікатори вимог . І рядки для рядкових версій відповідних команд Python.


Приємно! Як я можу зробити те саме sys.platform == "win32"? Я спробував використати :sys.platform == "win32", але від setup()функції отримую помилку "Недійсний маркер середовища"
Андре Карон,

3
Оновлення: PEP 496 - Маркери середовища замінено PEP 508 - Специфікація залежності програмних пакетів Python , яка повністю визначає синтаксис оголошення залежностей, включаючи синтаксис маркерів середовища .
jkdev,

10

Ви можете створити кілька файлів вимог, помістити ці загальні пакети у загальний файл і включити їх до іншого файлу вимог pip за допомогою -r file_path

requirements/
  base.txt
  python2.txt
  python3.txt

python2.txt:

-r base.txt
Django==1.4 #python2 only packages

python3.txt:

-r base.txt
Django==1.5 #python3 only packages

pip install -r вимоги / python2.txt

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.