import and shared global variables

Michael Brenner brenner at informatik.uni-freiburg.de
Fri Mar 10 08:48:27 EST 2006


Hi,

I'm implementing a plugin-based program, structured like the example 
below (where m1 in the main module, loading m2 as a plugin).  I wanted 
to use a single global variable (m1.glob in the example) to store some 
config data that the plugins can access.  However, the output shown 
belown seems to imply that glob is *copied* or recreated during the 
import in m2.  Am I missing something? I thought m1 should be in 
sys.modules and not be recreated during the import in m2.

After browsing c.l.p, it seems that this is probably somehow due to the 
circular import.  However, I do not really see why this should be a 
problem here.  Interestingly, the problem disappears when I put the code 
in m1 in a real main() function instead of "if __name__" etc.  Though 
this seems to solve my problem, I still want to understand what's 
happening.

Thanks,

	michael


m1.py:
------
glob = [1]
if __name__ == "__main__":
     glob.append(2)
     print "m1.main().1:", glob
     m2 = __import__("m2")
     m2.test()
     print "m1.main().2:", glob
------

m2.py:
------
def test():
     import m1
     print "m2.test():", m1.glob
-----

Output:
m1.main().1: [1, 2]
m2.test(): [1]
m1.main().2: [1, 2]



More information about the Python-list mailing list