在我的主文件(根级别)中,我有:from deepspeech2_utils import reduce_tensor, check_loss我还有一个:__init__.pyfrom submodules.deepspeech2 import utils as deepspeech2_utils我有一个目录结构,如下所示:main.py
__init__.py
-submodules
-deepspeech2
-utils.py但是我收到一个错误: from deepspeech2_utils import reduce_tensor, check_loss
ImportError: No module named deepspeech2_utils我还尝试了:from submodules.deepspeech2.utils import reduce_tensor, check_loss但得到同样的错误。我做错了什么?
1 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
因此,在python中将目录识别为模块的方式是通过这些目录中存在文件。这些文件不需要有代码。因此,将目录结构更改为如下所示__init__.py__init__.py
root main.py __init__.py submodules __init__.py deepspeech2 __init__.py utils.py
现在,一旦完成此操作,您的 import 语句(如果没有上述目录更改就无法工作)具有作用域,它将在具有不同作用域的您的作用域中不可见。为了实现您正在做的事情,请将您的进口声明更改为 main.py__init__.pymain.py
from root.deepspeech2_utils import reduce_tensor, check_loss
除了命名空间的原因之外,我还必须建议,不鼓励导入,因为模块的用户可能只想从模块/子模块中导入特定内容,并且导入语句将强制他们拥有比他们想要的更多的导入。这是另一篇详细讨论此类问题的帖子的答案__init__.py__init__.py
添加回答
举报
0/150
提交
取消
