2010-10-16 6 views
2

J'ai un programme/blague qui nécessite une structure de données raisonnablement grande pour fonctionner (un dictionnaire qui prend quelques secondes à construire) et je voudrais créer et pickle dans le répertoire d'installation lors de l'exécution python setup.py install.Appel d'une fonction dans un module après l'installation de setup.py

setup() à distutils.core ressemble il ne devrait pas sortir, donc je pensais que je pouvais importer mon module et appeler la fonction après avoir appelé setup() dans setup.py, mais il ne semble pas fonctionner, même si l'installation fait travail.

C'est ce que mon setup.py ressemble en ce moment:

from distutils.core import setup 

setup(... 
    ) 

from phoneoops import utils 

utils.get_hashed_dictionary(save=True) 
+1

Umm, pourquoi ne pas créer * avant * appelant 'setup' et le passer au paramètre' data_files' ?? – AndiDog

+0

AndiDog si vous en faites une réponse, je vais l'accepter, ça fonctionne. – quodlibetor

Répondre

1

J'ai créé un mannequin comme setup.py:

from distutils.core import setup 
setup() 
print 'after' 

et mes impressions déclaration d'impression très bien après l'exécution python setup.py install.
J'ai essayé une commande invalide comme python setup.py xx, et l'impression après n'a pas été appelée.

Etes-vous sûr qu'il n'a pas déclenché d'exception ou de SystemExit?

Lorsque j'ai modifié cet exemple simple:

try: 
    setup() 
except SystemExit as e: 
    print e 
print 'after' 

et couru python setup.py xx, la AFTER a fonctionné très bien.

Edit:
Convenu, @AndiDog, ce qui est mieux (sauf pour une raison quelconque, vous voulez avaler l'exception):

try: 
    setup() 
finally: 
    print 'after' 
+1

Vous devriez plutôt utiliser une instruction 'finally' dans votre second exemple, afin de ne pas avaler le code de retour d'erreur de l'appel' setup() 'qui a échoué. – AndiDog

+0

ma3204 vous avez raison, j'ai oublié que mon PYTHONPATH a '.' au début et non à la fin, j'importais la version du répertoire source au lieu du répertoire de destination. – quodlibetor

Questions connexes