122 votes

Fichier requirements.txt en fonction de la version de python

Je cherche à porter un package python2 vers python3 (pas le mien) en utilisant six afin qu'il soit compatible avec les deux. Cependant, l'un des packages répertoriés dans requirements.txt est maintenant inclus dans la stdlib de python3 et la version pypi ne fonctionne pas en python3, je veux donc l'exclure conditionnellement. Faire cela dans setup.py est facile, je peux simplement faire quelque chose comme :

if sys.version_info[0] == 2:
    requirements += py2_requirements
else:
    requirements += py3_requirements

Mais je voudrais que requirements.txt reflète également la liste correcte. Je ne trouve rien à ce sujet dans la documentation de pip, donc quelqu'un sait-il comment le faire, ou si c'est même possible ?

202voto

TonySeek Points 557

Vous pouvez utiliser les marqueurs d'environnement pour y parvenir dans requirements.txt depuis pip 6.0:

SomeProject==5.4; python_version < '2.7'
SomeProject; sys_platform == 'win32'

C'est également pris en charge par setuptools en déclarant des exigences supplémentaires dans setup.py:

setup(
    ...
    install_requires=[
        'six',
        'humanize',
    ],
    extras_require={
        ':python_version == "2.7"': [
            'ipaddress',
        ],
    },
)

Voir aussi les spécifications de besoin. Et les Chaînes pour les versions en chaîne des commandes Python correspondantes.

17voto

Leonardo.Z Points 2494

Vous pouvez créer plusieurs fichiers de requirements, mettre ces paquets communs dans un fichier commun, et les inclure dans un autre fichier de requirements pip avec -r chemin_du_fichier

requirements/
  base.txt
  python2.txt
  python3.txt

python2.txt:

-r base.txt
Django==1.4 #paquets uniquement pour python2

python3.txt:

-r base.txt
Django==1.5 #paquets uniquement pour python3

pip install -r requirements/python2.txt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X