Search code examples
pythonmoduleglobal-variablesglobal

Make modules available globally


I'm trying to make my modules available globally

Filesystem structure

main.py
module_static.py
folder/module_dynamic.py # this is example, but imagine 100s of modules

main.py

print('Loading module_static')
import module_static
module_static.test()

# Trying to make module_static available globally
globals()['module_static'] = module_static
__all__ = ['module_static']

print('Loading module_dynamic')
import sys
sys.path.append('./folder/')
import module_dynamic
module_dynamic.test()

module_static.py

def test():
    print('  -> This is module_static')

module_dynamic.py

def test():
    print('  -> This is module_dynamic')
    module_static.test()

Running main.py creates the following execution flow main.py -> module_dynamic.py -> module_static.py

enter image description here

So as you can see:

  • Loading of modules is working properly
  • However, despite trying to make module_static available globally, it isn't working a module_dynamic.py throws an error saying module_static doesn't exist

How can I make module_static.py available in module_dynamic.py (ideally without having to write any additional code in module_dynamic.py)?


Solution

  • Not saying it's good practice, but you can do

    main.py

    import builtins
    import module_static
    builtins.module_static = module_static
    

    This should allow you to use module_static from anywhere.

    More info on builtins: How to make a cross-module variable?