J'essaie de porter un package python2 vers python3 (pas le mien) en utilisant six pour qu'il soit compatible avec les deux. Cependant, l'un des packages répertoriés dans requirements.txt est maintenant inclus dans la version stdlib python3 et la version pypi ne fonctionne pas dans python3, donc je veux 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 j'aimerais aussi que requirements.txt reflète la liste correcte. Je ne trouve rien à ce sujet dans la documentation de pip. alors est-ce que quelqu'un sait comment le faire, ou si c'est même possible?
Réponses:
Vous pouvez utiliser les marqueurs d'environnement pour y parvenir
requirements.txt
depuispip 6.0
:SomeProject==5.4; python_version < '2.7' SomeProject; sys_platform == 'win32'
Il 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 également les spécificateurs d'exigences . Et des chaînes pour les versions de chaîne des commandes Python correspondantes.
la source
sys.platform == "win32"
? J'ai essayé d'utiliser:sys.platform == "win32"
, mais j'obtiens une erreur "Marqueur d'environnement non valide" de lasetup()
fonctionVous pouvez créer plusieurs fichiers d'exigences, placer ces packages communs dans un fichier commun et les inclure dans un autre fichier d'exigences pip avec
-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 exigences / python2.txt
la source