Requirements.txt в зависимости от версии python
Я пытаюсь перенести пакет python2 на python3 (не мой собственный), используя шесть, чтобы он совместим с обоими. Однако один из пакетов, перечисленных в файле требований .txt, теперь включен в stdlib python3, а версия pypi не работает в python3, поэтому я хочу условно исключить его. Делать это в setup.py легко, я могу просто сделать что-то вроде:
if sys.version_info[0] == 2:
requirements += py2_requirements
else:
requirements += py3_requirements
Но я бы хотел, чтобы требования .txt отображали правильный список. Я ничего не могу найти в документации по протоколу. так кто-нибудь знает, как это сделать, или если это возможно?
Ответы
Ответ 1
Вы можете использовать маркеры среды, чтобы достичь этого в 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',
],
},
)
См. также спецификаторы требований.
Ответ 2
Вы можете создать несколько файлов требований, поместить эти общие пакеты в общий файл и включить их в другой файл требований к требованиям с -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 requirements/python2.txt
Ответ 3
Я не думаю, что это возможно, потому что файл requirements.txt - это просто текстовый файл. Самое близкое, о чем я могу думать, - это закомментировать пакет в файле требований .txt с комментарием выше, указав, что он должен быть установлен для python2.6. Может быть, стоит добавить код для проверки версии python?
import sys
if sys.version_info.major == 2:
try:
import blah
except ImportError:
sys.stderr.write("Yo, pip install blah")
sys.exit(1)
Ответ 4
См. мой ответ fooobar.com/info/144055/... и этот script: https://gist.github.com/pombredanne/72130ee6f202e89c13bb