In Python, it is possible to dynamically import an entire module using importlib.import_module(name), which returns the specified package or module (e.g. pkg.mod). However, is there no analogous way to dynamically import a specific function/class/etc. from a given module in the same fashion as done using e.g. from foo import bar, where the symbol bar of the module foo is imported into the symbol table of the importing module?
For example, if I try to import a symbol directly using importlib.import_module(symbol_name), I just get an ImportError:
import importlib
# Importing an entire module works fine
imported_module = importlib.import_module("os.path")
# This doesn't work
imported_symbol = importlib.import_module("os.path.basename")
Executing the code above prints the following stack trace:
Traceback (most recent call last):
File "/home/stackoverflow/dev/importtest.py", line 6, in <module>
symbol = importlib.import_module("basename", "os.path.basename")
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'basename'