Estoy intentando portar un paquete python2 a python3 (no el mío) usando seis para que sea compatible con ambos. Sin embargo, uno de los paquetes enumerados en requirements.txt ahora está incluido en python3 stdlib y la versión de pypi no funciona en python3, así que quiero excluirlo condicionalmente. Hacer esto en setup.py es fácil, puedo hacer algo como:
if sys.version_info[0] == 2:
requirements += py2_requirements
else:
requirements += py3_requirements
Pero me gustaría que requirements.txt refleje la lista correcta también. No puedo encontrar nada sobre esto en la documentación de pip. Entonces, ¿alguien sabe cómo hacerlo, o si es posible?
Respuestas:
Puede utilizar los marcadores de entorno para lograr esto
requirements.txt
desdepip 6.0
:SomeProject==5.4; python_version < '2.7' SomeProject; sys_platform == 'win32'
También es compatible con setuptools al declarar requisitos adicionales en
setup.py
:setup( ... install_requires=[ 'six', 'humanize', ], extras_require={ ':python_version == "2.7"': [ 'ipaddress', ], }, )
Consulte también especificadores de requisitos . Y cadenas para las versiones de cadena de los comandos de Python correspondientes.
fuente
sys.platform == "win32"
? Intenté usar:sys.platform == "win32"
, pero obtengo un error de "Marcador de entorno no válido" de lasetup()
funciónPuede crear varios archivos de requisitos, poner esos paquetes comunes en un archivo común e incluirlos en otro archivo de requisitos pip con
-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 requirements / python2.txt
fuente