I'm trying to use importlib.import_module
in Python 2.7.2 and run into the strange error.
Consider the following dir structure:
a | + - __init__.py - b | + - __init__.py - c.py
a/b/__init__.py
has the following code:
import importlib mod = importlib.import_module("c")
(In real code "c"
has a name.)
Trying to import a.b
, yields the following error:
>>> import a.b Traceback (most recent call last): File "", line 1, in File "a/b/__init__.py", line 3, in mod = importlib.import_module("c") File "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named c
What am I missing?
Thanks!
The importlib package provides the implementation of the import statement in Python source code portable to any Python interpreter. This also provides an implementation which is easier to comprehend than one implemented in a programming language other than Python.
__import__() Parameters name - the name of the module you want to import. globals and locals - determines how to interpret name. fromlist - objects or submodules that should be imported by name. level - specifies whether to use absolute or relative imports.
To import module from string variable with Python, we can use the importlib. imnport_module method. to call importlib. import_module with the module name string to import the module.
For relative imports you have to:
b) provide anchor explicitly
importlib.import_module('.c', 'a.b')
Of course, you could also just do absolute import instead:
importlib.import_module('a.b.c')
I think it's better to use importlib.import_module('.c', __name__)
since you don't need to know about a
and b
.
I'm also wondering that, if you have to use importlib.import_module('a.b.c')
, why not just use import a.b.c
?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With