wheel how all python setuptools distutils distribute install-requires

how - Install_requires basado en la versión de python



pip python (2)

Tengo un módulo que funciona tanto en Python 2 como en Python 3. En Python <3.2, me gustaría instalar un paquete específico como una dependencia. Para Python> = 3.2.

Algo como:

install_requires=[ "threadpool >= 1.2.7 if python_version < 3.2.0", ],

¿Cómo se puede hacer eso?


Esto se ha discutido here , parecería que la forma recomendada es probar la versión de Python dentro de su setup.py usando sys.version_info ;

import sys if sys.version_info >= (3,2): install_requires = ["threadpool >= 1.2.7"] else: install_requires = ["threadpool >= 1.2.3"] setup(..., install_requires=install_requires)


setuptools tiene soporte para esto usando marcadores de entorno .

install_requires=[ ''enum34;python_version<"3.4"'', ''pywin32 >= 1.0;platform_system=="Windows"'' ]

El uso de este se detalla en la documentación oficial . Sobre la base de que el registro de cambios se agregó en v20.5, pero la implementación no fue estable hasta v20.8.1 (que fue solo una brecha de 15 días).

Respuesta original (aún válida, pero podría estar en desuso en el futuro):

setuptools tiene soporte para esto usando dentro del argumento extras_require .

El formato es el siguiente:

extras_require={ '':python_version=="2.7"'': ["mock"], },

Apoyará a los otros operadores de comparación.

Lamentablemente, no se menciona en la documentation . Mientras buscaba respuestas, encontré a PEP-426 hablando de "marcadores ambientales". Con esa frase pude encontrar un ticket de setuptools con el siguiente comentario:

He utilizado con éxito la función de marcadores para requerir selectivamente y declarativamente una dependencia. Ver backports.unittest_mock para un ejemplo. A través de los ''extras'', se requerirá simulacro, pero solo en Python 2. Cuando puedo confiar en Setuptools 17.1, puedo cambiar esa dependencia a python_version < "3.3" .