Question

J'ai créé une extension C que je voudrais activer dans mon paquet Python (en utilisant setuptools) uniquement si une option de ligne de commande est transmise. Quelle est la meilleure façon de le faire?

Je ne peux pas sembler trouver des façons d'aller simples à ce sujet.

Était-ce utile?

La solution

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

Ceci est hacky, mais peut-être plus facile. Une approche plus avancée serait d'étendre la classe de distribution afin de soutenir un drapeau, par exemple --with-modules puis personnaliser l'intérieur ext_modules finalize_options.

Autres conseils

Il est en fait un distribuer / setuptools fonctionnalité appelée « Fonctions » qui peuvent être utilisés pour cela. Il est conçu explicitement d'avoir setup.py faire des choses différentes en fonction des options de ligne de commande et de --with-xxx --without-xxx.

  • billet de blog donne une bonne introduction, je ne peux pas trouver une meilleure documentation à ce moment (en plus de la source Distribution - la classe d'entités et propose mot-clé).
  • Le projet de Jinja setup.py les utilisations Caractéristiques de votre objectif précis , il pourrait être un bon modèle pour travailler.
  • setup.py fait aussi quelque chose de similaire, sauf qu'il est codé pour toujours essayer de construire la fonction C-extension, il définit, et à l'arrière tomber grâce à python pur quand la construction échoue; cela peut aussi être utile pour vos besoins.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top