我试图在 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
我错过了什么?
谢谢!
对于相对进口,您必须:
a) 使用相对名称
b) 显式提供锚 importlib.import_module('.c', 'ab')
当然,你也可以只做绝对导入:
importlib.import_module('a.b.c')
我认为最好使用 importlib.import_module('.c', __name__)
,因为您不需要了解 a
和 b
。
我还想知道,如果必须使用 importlib.import_module('a.b.c')
,为什么不直接使用 import a.b.c
?
并且不要忘记为每个文件夹/子文件夹创建一个 __init__.py
(即使它们是空的)
不定期副业成功案例分享
import long_name as ln
一样重命名它吗?abc = importlib.import_module('a.b.c')