我正在尝试在Python 2.7.2中使用importlib.import_module
并遇到奇怪的错误。
考虑以下目录结构:
a | + - __init__.py - b | + - __init__.py - c.py
a/b/__init__.py
包含以下代码:
import importlib mod = importlib.import_module("c")
(在实际代码"c"
中有一个名称。)
尝试import a.b
,会产生以下错误:
>>> 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
我错过了什么?
谢谢!
答案 0 :(得分:62)
对于相对进口,您必须:
b)明确提供锚
importlib.import_module('.c', 'a.b')
当然,你也可以做绝对导入:
importlib.import_module('a.b.c')
答案 1 :(得分:18)
我认为使用importlib.import_module('.c', __name__)
会更好,因为您不需要了解a
和b
。
我还想知道,如果你必须使用importlib.import_module('a.b.c')
,为什么不使用import a.b.c
?
答案 2 :(得分:8)
不要忘记为每个文件夹/子文件夹创建一个__init__.py
(即使它们是空的)