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)。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__), '..')))