Qual è il modo più semplice per fare un'estensione opzionale C per un pacchetto python?
-
27-09-2019 - |
Domanda
Ho creato un estensione di C che mi piacerebbe per consentire nel mio pacchetto Python (usando setuptools) solo se l'opzione riga di comando viene passato. Qual è il modo più semplice per farlo?
Non riesco a trovare nessuna modi semplici di andare su questo.
Soluzione
ext_modules = []
if '--add-this' in sys.argv:
ext_modules.append(Extension(...))
sys.argv.remove('--add-this')
setup(...
ext_modules = ext_modules
)
Questa è hacky, ma potrebbe essere più semplice. Un approccio più avanzato sarebbe quello di estendere la classe di distribuzione di sostenere una bandiera, dire --with-modules
e quindi personalizzare extension all'interno finalize_options.
Altri suggerimenti
In realtà c'è una distribuire / setuptools funzione chiamata "Funzioni" che possono essere utilizzati per questo.
E 'esplicitamente progettato per avere setup.py fare cose diverse in base --with-xxx
e di comando --without-xxx
opzioni della riga.
- post sul blog fornisce un'introduzione bella, non riesco a trovare alcuna documentazione di meglio in questo momento (oltre alla fonte Distribuire - la classe Feature e presenta parola chiave ).
- setup.py usi del progetto Jinja Caratteristiche per il vostro scopo esatto , potrebbe essere un modello di buona su cui lavorare.
- Il simplejson setup.py fa anche qualcosa di simile, tranne che è codificato per sempre cercare di costruire la funzione C-estensione definisce, e ripiegare con grazia al puro-python quando costruzione fallisce; questo può anche essere utile per il vostro scopo.