Search code examples
pythonimportmodulepython-module

How to make global imports from a function?


I fear that this is a messy way to approach the problem but...

let's say that I want to make some imports in Python based on some conditions.

For this reason I want to write a function:

def conditional_import_modules(test):
    if test == 'foo':
        import onemodule, anothermodule
    elif test == 'bar':
        import thirdmodule, and_another_module
    else:
        import all_the_other_modules

Now how can I have the imported modules globally available?

For example:

conditional_import_modules(test='bar')
thirdmodule.myfunction()

Solution

  • Imported modules are just variables - names bound to some values. So all you need is to import them and make them global with global keyword.

    Example:

    >>> math
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'math' is not defined
    >>> def f():
    ...     global math
    ...     import math
    ...
    >>> f()
    >>> math
    <module 'math' from '/usr/local/lib/python2.6/lib-dynload/math.so'>