Я пытаюсь перенести пакет python2 на python3 (не свой собственный), используя шесть, чтобы он был совместим с обоими. Однако один из пакетов, перечисленных в requirements.txt, теперь включен в stdlib python3, а версия pypi не работает в python3, поэтому я хочу условно исключить ее. Сделать это в setup.py просто, я могу просто сделать что-то вроде:
if sys.version_info[0] == 2:
requirements += py2_requirements
else:
requirements += py3_requirements
Но я бы хотел, чтобы в файле requirements.txt тоже был правильный список. Я не могу найти ничего по этому поводу в документации по протоколу. так кто-нибудь знает, как это сделать, или возможно ли это вообще?
Ответы:
Вы можете использовать маркеры среды для достижения этой цели в
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()
функцииВы можете создать несколько файлов требований, поместить эти общие пакеты в общий файл и включить их в другой файл требований pip с помощью
-r file_path
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
источник