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.

È stato utile?

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top