Estou tentando portar um pacote python2 para python3 (não meu) usando seis para que seja compatível com ambos. No entanto, um dos pacotes listados em requirements.txt agora está incluído no python3 stdlib e a versão pypi não funciona no python3, portanto, desejo excluí-lo condicionalmente. Fazer isso em setup.py é fácil, posso apenas fazer algo como:
if sys.version_info[0] == 2:
requirements += py2_requirements
else:
requirements += py3_requirements
Mas eu gostaria que o arquivo requirements.txt também refletisse a lista correta. Não consigo encontrar nada sobre isso na documentação do pip. então, alguém sabe como fazer, ou se é mesmo possível?
Respostas:
Você pode usar os marcadores de ambiente para conseguir isso
requirements.txt
desdepip 6.0
:SomeProject==5.4; python_version < '2.7' SomeProject; sys_platform == 'win32'
Também é compatível com ferramentas de configuração, declarando requisitos extras em
setup.py
:setup( ... install_requires=[ 'six', 'humanize', ], extras_require={ ':python_version == "2.7"': [ 'ipaddress', ], }, )
Veja também especificadores de requisitos . E Strings para as versões de string dos comandos Python correspondentes.
fonte
sys.platform == "win32"
? Tentei usar:sys.platform == "win32"
, mas recebo um erro "Marcador de ambiente inválido" dasetup()
funçãoVocê pode criar vários arquivos de requisitos, colocar esses pacotes comuns em um arquivo comum e incluí-los em outro arquivo de requisitos pip com
-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 requisitos / python2.txt
fonte