为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Python从嵌套的子目录中导入某些内容?

如何使用Python从嵌套的子目录中导入某些内容?

大话西游666 2022-09-27 09:35:00
在我的主文件(根级别)中,我有: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


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号