无法导入与子模块位于同一目录中的文件

问题描述

我具有以下文件结构:

/main/main.py
/main/sub/__init__.py
/main/sub/subtools.py

sub/__init__.py中,我全部从subtools.py(from subtools import *)导入。

然后在main.py中导入sub(import sub

但是,当我这样做时,会收到错误no module named 'subtools',但是如果单独运行 init .py,我不会收到该错误

我该如何解决

解决方法

对于工作目录/main

您需要在from sub.subtools import *中包含/main/sub/__init__.py,需要指定完整的“命名空间”

或者,使用相对引用:from .subtools import *

然后一切正常。

说明:

重点是,始终相对于当前工作目录(加上PATH中的所有目录)进行此导入,如果是相对引用,则采用它所在的目录。

或者,一种变通方法,但不是一种好的做法,是使用/main/sub目录扩展PATH变量,然后from subtools import *就可以了。 (在某些情况下,这是必要的解决方案。)