这是程序的结构:
├── app.py
├── apps
│ ├── __init__.py
│ ├── secure
│ │ ├── handler.py
│ │ └── __init__.py
└ └── test.py
我正在app.py
尝试从 app.secure 内部动态导入处理程序,如下所示:
import importlib
a = importlib.import_module('handler', 'apps.secure')
通过这样做,我希望处理程序被导入,但我收到以下错误:
Traceback (most recent call last):
File "/home/user/Projects/toolkit/app.py", line 5, in <module>
a = importlib.import_module('handler', 'apps.sticker_to_sticker')
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 'handler'
在尝试使用__import__
而不是像__import__('apps.secure.handler')
我注意到它实际上导入了应用程序包之后。虽然from apps.secure import handler
工作正常。我需要动态导入,因为程序需要能够在应用程序包中加载任何包。
有没有办法动态导入这个模块或者我必须使用exec
?