requirements.txt a seconda della versione di python


91

Sto cercando di portare un pacchetto python2 su python3 (non il mio) usando sei in modo che sia compatibile con entrambi. Tuttavia, uno dei pacchetti elencati in requirements.txt è ora incluso nello stdlib di python3 e la versione di pypi non funziona in python3, quindi voglio escluderlo in modo condizionale. Farlo in setup.py è facile, posso semplicemente fare qualcosa come:

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

Ma vorrei che requirements.txt riflettesse anche l'elenco corretto. Non riesco a trovare nulla su questo nella documentazione del pip. quindi qualcuno sa come farlo, o se è anche possibile?


1
Si prega di modificare la risposta accettata a stackoverflow.com/a/33451105/99834 , che è senza dubbio il modo giusto per implementarlo.
sorin

Risposte:


140

È possibile utilizzare i marcatori di ambiente per ottenere ciò in requirements.txtquanto pip 6.0:

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

È supportato anche da setuptools dichiarando requisiti aggiuntivi in setup.py:

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

Vedere anche gli specificatori dei requisiti . E stringhe per le versioni stringa dei corrispondenti comandi Python.


Bello! Come posso fare lo stesso con sys.platform == "win32"? Ho provato a utilizzare :sys.platform == "win32", ma ricevo un errore "Indicatore ambiente non valido" dalla setup()funzione
André Caron

3
Aggiornamento: PEP 496 - Indicatori di ambiente è stato sostituito da PEP 508 - Specifica di dipendenza per pacchetti software Python , che specifica completamente la sintassi della dichiarazione di dipendenza, inclusa la sintassi per i contrassegni di ambiente .
jkdev

11

È possibile creare più file di requisiti, inserire quei pacchetti comuni in un file comune e includerli in un altro file di requisiti pip con estensione -r file_path

requirements/
  base.txt
  python2.txt
  python3.txt

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 requisiti / python2.txt

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.