The problem I was having was that changes done to a variable in another module was not being shown in a different module when accessing it. To demonstrate this, let's say we have 3 files:

a.py:

CONFIG = None

b.py:

from a import CONFIG
from c import foo

if __name__ == '__main__':
    CONFIG = 13
    print "CONFIG in b = {}".format(CONFIG) # prints 13
    foo() # prints None

c.py:

from a import CONFIG

def foo():
    print "CONFIG in c = {}".format(CONFIG)

The problem is that foo() in c.py wants to access the changed variable of CONFIG done by b.py, but ends up returning None.

The solution was to use import a instead of from a import CONFIG:

a.py (no change):

CONFIG = None

b.py:

import a
from c import foo

if __name__ == '__main__':
    a.CONFIG = 13
    print "CONFIG in b = {}".format(a.CONFIG) # prints 13
    foo() # prints 13

c.py:

import a

def foo():
    print "CONFIG in c = {}".format(a.CONFIG)

The difference between from a import CONFIG and import a is that from a import CONFIG creates a reference to the value of CONFIG in the local namespace that it is being imported in. import a on the other hand, creates a reference to the module a itself.

So by importing CONFIG specifically, you are creating a local copy of the variable CONFIG, whereas importing a creates a reference of that module in your local namespace. By using the a.CONFIG form, modules will be able to modify it and also allow the modules to see changes done by other modules.