2010-10-30 44 views

Répondre

3
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 consisterait à étendre la classe Distribution pour prendre en charge un indicateur, par exemple --with-modules, puis à personnaliser ext_modules dans finalize_options.

14

Il existe en fait une fonction distribute/setuptools appelée "Features" qui peut être utilisée pour cela. Il est explicitement conçu pour que setup.py fasse des choses différentes basées sur les options de ligne de commande --with-xxx et --without-xxx.

  • Ce blog post donne une bonne introduction, je ne peux pas trouver une meilleure documentation à ce moment (en plus de la source Distribution - the Feature class et features keyword).
  • Le projet setup.py de jinja utilise des fonctionnalités pour votre but exact, il pourrait être un bon modèle à partir duquel travailler.
  • Le simplejson setup.py fait aussi quelque chose de similaire, sauf qu'il est codé pour toujours essayer de construire la fonction d'extension C qu'il définit, et revenir en arrière à pure-python lorsque le développement échoue; Cela peut également être utile pour votre objectif.