2010-10-30 11 views

risposta

3
ext_modules = [] 
if '--add-this' in sys.argv: 
    ext_modules.append(Extension(...)) 
    sys.argv.remove('--add-this') 
setup(... 
     ext_modules = ext_modules 
) 

Questo è un hacker, ma potrebbe essere più semplice. Un approccio più avanzato sarebbe estendere la classe Distribution per supportare un flag, ad esempio --with-modules e quindi personalizzare ext_modules all'interno di finalize_options.

14

C'è in realtà una funzione di distribuzione/setuptools chiamata "Funzioni" che può essere utilizzata per questo. È progettato in modo esplicito per impostare setup.py su cose diverse in base alle opzioni della riga di comando --with-xxx e --without-xxx.

  • Questo blog post dà una bella introduzione, non riesco a trovare alcuna documentazione di meglio in questo momento (oltre alla fonte Distribuire - the Feature class e features keyword).
  • setup.py del progetto jinja utilizza le funzionalità per lo scopo esatto, potrebbe essere un buon modello da cui lavorare.
  • Il simplejson setup.py fa anche qualcosa di simile, tranne che è codificato per cercare sempre di costruire la caratteristica di estensione C che definisce, e ricade con garbo su pure-python quando la compilazione fallisce; questo può anche essere utile per il tuo scopo.