Frage

Ich habe eine C-Erweiterung erstellt, dass ich in meinem Python-Paket ermöglichen möge (Setuptools verwenden) nur dann, wenn eine Option Befehlszeile übergeben wird. Was ist der einfachste Weg, dies zu tun?

Ich kann keine einfache Wege zu gehen, darüber zu finden scheinen.

War es hilfreich?

Lösung

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

Dies ist hacky, aber vielleicht am einfachsten sein. Ein weitergehender Ansatz wäre es, die Verteilung Klasse zu erweitern, um eine Flagge zu unterstützen, sagt --with-modules und dann ext_modules innerhalb finalize_options anpassen.

Andere Tipps

Es gibt tatsächlich eine verteilen / Setuptools Feature „Features“ genannt, die dafür verwendet werden kann. Es ist ausdrücklich entworfen haben setup.py auf --with-xxx und --without-xxx Kommandozeilenoptionen basierend verschiedene Dinge tun.

  • Die Blog-Post eine schöne Einleitung gibt, kann ich keine bessere Dokumentation zu dieser Zeit (neben dem Verteilen Quelle finden - die Feature-Class und kennzeichnet Stichwort ).
  • Die setup.py verwendet Funktionen für Ihre genauen Zweck , könnte es eine gute Vorlage Arbeit aus sein.
  • Die simplejson setup.py auch macht etwas Ähnliches, Abgesehen davon, dass es immer codiert versuchen, die C-Erweiterung Funktion es definiert, zu bauen und wieder anmutig zu reinem python fallen, wenn Gebäude ausfallen; dies auch für Ihre Zwecke nützlich sein kann.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top