2010-10-25 13 views
0

Je souhaite créer un fichier de script standard importé dans Python au démarrage à l'aide de la variable d'environnement PYTHONSTARTUP. De plus, je veux être en mesure de recharger facilement le même fichier de script après l'avoir modifié dans un éditeur externe, pour tester son comportement après la modification. J'ai créé un fichier ~/.pythonrc.py et le définir comme PYTHONSTARTUP:Utilisation de PYTHONSTARTUP pour tester interactivement un fichier python dans l'interpréteur

import os 
import imp 

def load_wb(): 
    _cwd = os.getcwd() 
    os.chdir(os.path.join(os.getenv('HOME'),'Skripte')) 
    import workbench 
    imp.reload(workbench) 
    os.chdir(_cwd) 

load_wb() 

Ceci est mon très minime fichier de script pour le début:

def dull_function(): 
    print('Not doing much...') 

print('Workbench loaded.') 

Quand je lance Python 3.1.2, .pythonrc est exécuté avec succès et le workbench.py ​​est importé, mais la fonction dull_function n'apparaît pas dans l'espace de noms global ou dans un espace local. Qu'est-ce que je dois faire différemment?

+1

Avez-vous essayé 'workbench.dull_function'? – rubik

+0

workbench.dull_functuion génère une erreur NameError. Cela n'est pas surprenant, car ni workbench ni dull_function n'apparaissent dans l'espace de noms listé par dir() après les imports. imp.reload (workbench) renvoie un objet module. Existe-t-il un moyen d'intégrer manuellement cet objet dans l'espace de noms global? – neradis

Répondre

0

Déplacez l'instruction import en dehors de la fonction. Vous êtes en train d'importer le module workbench dans la portée de la fonction, pas la portée globale (essayez d'appeler workbench.dull_function depuis l'intérieur load_wb pour voir par vous-même).

En d'autres termes, changer votre code:

import os 
import imp 
import workbench 

def load_wb(): 
    _cwd = os.getcwd() 
    os.chdir(os.path.join(os.getenv('HOME'), 'Skripte')) 
    imp.reload(workbench) 
    os.chdir(_cwd) 

load_wb() 
0

Pas vraiment résoudre votre problème immédiat, mais ... Vous apprécierez l'utilisation shell ipython pour les tests dans ce cas. En utilisant la fonctionnalité autoimport, vous pouvez marquer un module pour (re) charger sur chaque ligne exécutée si nécessaire.

Cela signifie que vous pouvez %aimport workbench et puis chaque fois que vous exécutez some_function_Im_testing(), workbench sera rechargé s'il changeait. Ajoutez simplement la ligne autoimport dans le fichier de configuration pour ipython et vous avez terminé.