从另一个包中动态导入一个包
Dynamically importing a package from inside another package
程序结构如下:
├── 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
?
尝试使 'handler' 导入相对:
import importlib
a = importlib.import_module('.handler', 'apps.secure')
documentation 涵盖了从子模块中进行相对导入的类似示例。
程序结构如下:
├── 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
?
尝试使 'handler' 导入相对:
import importlib
a = importlib.import_module('.handler', 'apps.secure')
documentation 涵盖了从子模块中进行相对导入的类似示例。