Import from Module by Importing via String in Python – How to

python

I know I can use importlib to import modules via a string. How can I recreate the import * functionality using this library? Basically, I want something like this:

importlib.import_module('path.to.module', '*')

My reasons for not name-spacing the imported attributes are deliberate.

Best Answer

Here is a solution: import the module, then one by one make alias in the current namespace:

import importlib

# Import the module
mod = importlib.import_module('collections')

# Determine a list of names to copy to the current name space
names = getattr(mod, '__all__', [n for n in dir(mod) if not n.startswith('_')])

# Copy those names into the current name space
g = globals()
for name in names:
    g[name] = getattr(mod, name)