【发布时间】:2021-03-10 19:41:40
【问题描述】:
我有以下结构:
PACKAGE/
__init__.py
mod1.py
mod2.py
...
code.py
在我的code.py,我想导入整个PACKAGE文件夹:
import PACKAGE
# execute some functions from mod1, mod2 or ... here.
为了保证动态导入,我在__init__.py中使用了如下代码:
import os
import importlib
for module in os.listdir(os.path.dirname(__file__)):
if module == '__init__.py' or module[-3:] != '.py':
continue
importlib.import_module(module[:-3], package='PACKAGE')
del module
但是,执行code.py 会导致ModuleNotFoundError: No module named 'mod1'
我想知道为什么?到目前为止,我阅读了几次尝试来实现我想做的事情,但都没有奏效。这里的这个似乎对我来说是最有希望的,但我不工作。
我在这里没有看到什么?
此外,当它出现在 cmets 中时,from PACKAGE import * 可以解决问题,但我想保留导入正确包的导入形式,例如 import PACKAGE。
【问题讨论】:
-
调用
importlib.import_module()不会将任何名称带入您的范围,因此如果您的想法是“神奇地”能够使用来自mod1或mod2的任何名称,这不是这样做。 -
但我什至没有达到这一点。导入过程中发生错误 -
os.listdir(os.path.dirname(__file__))列出了数组中的所有模块,然后循环并应一个接一个地导入 -
您是否收到
import PACKAGE的错误?您可能想放弃 init.py 代码,只需将 code.py 中的 import 语句更新为import PACKAGE *。如果我错过了重点,请详细说明。 -
是的,我是,尝试
import PACKAGE *会给我一个invalid synthax error(另外,我更愿意在没有*的情况下这样做 -
当你调用你的模块时,你用 PACKAGE.mode 调用它们吗?
标签: python