Search code examples
pythonpep8

Import a single global variable from a different module in python


I have an interesting application and I would like to access a global variable from a different module.

I currently have module x

from pkg.mod import *

in order to get the namespace foo.

where my pkg.mod looks like the following

import x
foo = 0
# do some stuff
foo = myClass()

That all works just great, however, I would like NOT to do that, mostly just because its bad.

If I try the following

from pkg import mod

I get a circular dependency issue. ImportError: cannot import name mod which makes sense to me.

What I want to do is

from pkg.mod import foo

but that also gives me an import name error: ImportError: cannot import name foo Which I am not exactly sure why, except I dont think you can import variables specifically.

Is there anyway to import foo following correct practices?

---edit---

I have tried to remove the shared variable and put it in a third module in such a way

pkg.y

foo = 0

pkg.mod

from pkg.y import foo
foo = myClass()
x.dostuff()

x

from pkg.y import foo
def dostuff():
   print(foo)

and now x thinks foo is still 0. (I can guarantee that mod is calling x, and thus happening first.)


Solution

  • When I need a true global variable I find it cleaner to create a module called trueglobals.py; it can remain empty but for proper documentation...

    # -*- coding: utf-8 -*-
    # Object references that are used extensively across many modules are 
    # stored here.
    
    # someObject1      - instantiated in main.py
    # someObject2      - instantiated in someothermodule.py
    

    In the module instantiating the object...

    import trueglobals
    trueglobals.someObject1 = myClass(somevar)
    

    In any module requiring the object...

    import trueglobals
    localVar = trueglobals.someObject1