2010-08-13 8 views
1

J'ai un module nommé module.py, qui vérifie une variable globale en contexte.Importer un module avec contexte

module.py: 
---------- 

if 'FOO' in globals(): 
    print 'FOO in globals' 
else: 
    print 'nah' 


in python shell: 
---------------- 

In [1]: FOO = True 

In [2]: import module 
nah 

Comment puis-je importer des modules avec un contexte existant?

Répondre

2

Ce qui est assez hackish - ne vous fiez pas à ce sujet pour le code de production car toutes les implémentations de Python ont une fonction inspect.getouterframes. Cependant, cela fonctionne dans CPython:

import inspect 
record=inspect.getouterframes(inspect.currentframe())[1] 
frame=record[0] 

if 'FOO' in frame.f_globals: 
    print 'FOO in globals' 
else: 
    print 'nah' 

% python 
>>> import test 
nah 
>>> 

% python 
>>> FOO=True 
>>> import test 
FOO in globals 
>>> 
+0

+1 pour la pureté pure! – katrielalex

+0

cela ne devrait pas être nécessaire et n'est pas recommandé. –

0

En appelant globals dans module.py, vous obtiendrez les variables globales dans le champ du module. Je suppose que vous voulez qu'il regarde les globals dans la portée de l'interprète? La réponse courte est que vous ne pouvez pas faire cela, et vous ne devriez pas vouloir. S'il a besoin d'une option, définissez cette option délibérément, mais ne vous référez pas à une magie globale.

Si vous devez, vous pouvez passer les globals de l'interprète avec

modules.update_config(globals()) 
Questions connexes