在 Python 中导入一个本身导入另一个模块的模块时遇到问题

Trouble importing a module that itself imports another module in Python

Python版本:3.8.5

文件结构

MainDir
   |
   | Utils --|
   |         | module1.py
   |         | module2.py
   |
   | Tests --|
             | test.py

module1.py 进口 module2.py test.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.)

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

再试一次

如果您的项目结构类似于 here,您可以使用它。还建议在你的包中使用相对导入

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