Pregunta

He creado una extensión C que me gustaría para que en mi paquete de Python (usando setuptools) sólo si una opción de línea de comandos se pasa. ¿Cuál es la manera más fácil de hacer esto?

Me parece que no puede encontrar maneras sencillas de ir sobre esto.

¿Fue útil?

Solución

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

Este es hacky, pero podría ser más fácil. Un enfoque más avanzado sería extender la clase de distribución para apoyar una bandera, por ejemplo --with-modules y personalizar el interior ext_modules finalize_options.

Otros consejos

En realidad hay un distribuir / setuptools característica denominada "Características" que se pueden utilizar para esto. Está diseñado explícitamente para tener setup.py hacer cosas diferentes en función de --with-xxx y de mando --without-xxx opciones de línea.

  • entrada de blog ofrece una introducción agradable, no puedo encontrar nada mejor documentación en este momento (además de la fuente de distribuir - la clase de entidad y cuenta con palabras clave ).
  • setup.py usos del proyecto de jinja para su propósito exacto , que podría ser una buena plantilla para trabajar.
  • setup.py también hace algo similar, excepto que está codificado para siempre tratar de construir la función de C-extensión se define, y caer de nuevo con gracia a pura-pitón cuando falla la construcción; esto también puede ser útil para su propósito.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top