gpt4 book ai didi

python - 从另一个包中动态导入一个包

转载 作者:行者123 更新时间:2023-12-01 09:15:47 25 4
gpt4 key购买 nike

程序的结构如下:

├── 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 工作正常。我需要动态导入,因为程序需要能够加载 apps 包内的任何包。

有没有办法动态导入这个模块,或者我必须使用exec

最佳答案

尝试使“处理程序”导入相对:

import importlib
a = importlib.import_module('.handler', 'apps.secure')

documentation涵盖了从子模块内相对导入的类似示例。

关于python - 从另一个包中动态导入一个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51268982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com