在Python中导入一个自身会导入另一个模块的模块时遇到麻烦



Python版本:3.8.5

文件结构
MainDir
|
| Utils --|
|         | module1.py
|         | module2.py
|
| Tests --|
| test.py

module1.py导入module2.pytest.py进口module1.py

当我运行python Tests/test.py我得到以下错误:

Traceback (most recent call last):
File "test.py", line 5, in <module>
import Utils.module1
File "<abspath>/MainDir/Utils/module1.py", line 16, in <module>
import module2
ModuleNotFoundError: No module named 'module2'

我试过以下方法:

1)。Python - Module Not Found

2)。

$export PYTHONPATH="$PWD"

3)。我试过把test.py文件放在与Utils目录相同的级别。

4)。

import sys
sys.path.append("../MainDir")

及其变体

他们都失败了。

唯一有效的是将test.py放在Utils目录中并从那里运行它。但是我知道当它在自己的目录下时,必须有一种方法让它工作。

我错过了什么?

选择的答案在试图运行test.py时工作,但在试图运行module1.py时失败。

经过更多的研究,用-m标志和包语法运行它是有效的;在我的例子中:

python -m Utils.module1

希望这能帮助到其他遇到这个问题的人。

您可能需要使用相对导入。

可能是这样的:

# in module1.py
import .module2

相对导入意味着您不是尝试从__main__文件导入,而是从当前文件(在您的示例中是module1.py)导入。

编辑:我才意识到我很蠢。这适用于模块,而不是单个文件。请重新输入from . import module2

如果你的项目结构像这样,你可以使用这个。此外,建议在包中使用相对导入

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

最新更新