wheel - setuptools python build




install_requires basato sulla versione python (2)

Ho un modulo che funziona sia su python 2 sia su python 3. In Python <3.2 vorrei installare un pacchetto specifico come dipendenza. Per Python> = 3.2.

Qualcosa di simile a:

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

Come si può farlo?


Questo è stato discusso here , sembrerebbe che il modo consigliato fosse di testare la versione di Python all'interno di 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 ha il supporto per questo usando marcatori di ambiente .

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

L'uso di questo è dettagliato nella documentazione ufficiale . In base al registro delle modifiche è stato aggiunto in v20.5, ma l'implementazione non è stata stabile fino alla v20.8.1 (che era solo un intervallo di 15 giorni).

Risposta originale (ancora valida, ma potrebbe essere deprecata in futuro):

setuptools supporta questo utilizzo all'interno dell'argomento extras_require .

Il formato è il seguente:

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

Supporterà gli altri operatori di confronto.

Purtroppo, non è menzionato nella documentation . Mentre cercavo risposte, ho trovato che PEP-426 parlava di "marcatori ambientali". Con quella frase sono riuscito a trovare un ticket setuptools con il seguente commento:

Ho usato con successo la funzione di marcatori per richiedere in modo selettivo e dichiarativo una dipendenza. Vedi backports.unittest_mock per un esempio. Attraverso gli "extra", sarà richiesto mock, ma solo su Python 2. Quando posso contare su Setuptools 17.1, posso cambiare quella dipendenza a python_version < "3.3" .





install-requires