Python脚本运行时提示Module not found:跨目录导入模块问题
问题原因及解决办法
问题根源
- 运行
Test.py时,Python默认只会把当前脚本所在的目录(即project/Scripts/Tests/)加入模块搜索路径,而dummy.py在上级的Scripts/目录里,不在这个搜索范围内,所以会提示找不到模块。 - 编辑器能识别是因为编辑器会自动把整个项目根目录或
Scripts/目录标记为源码根目录,提前加入了搜索路径,但Python运行脚本时不会自动做这个操作。
解决办法
方法1:使用相对导入
修改Test.py的代码为:
from ..dummy import basic
注意事项:
- 需要在
Scripts目录下创建一个空的__init__.py文件(让Python把Scripts识别为包)。 - 不能直接运行
Test.py,要从project目录执行命令:python -m Scripts.Tests.Test。
方法2:手动添加搜索路径
在Test.py开头加入以下代码,把Scripts目录加入Python的搜索路径:
import sys from pathlib import Path # 获取Scripts目录的路径 scripts_dir = Path(__file__).parent.parent sys.path.append(str(scripts_dir)) from dummy import basic
这样直接运行Test.py就能正常导入了。
方法3:设置环境变量
运行Test.py前,把Scripts目录的路径添加到PYTHONPATH环境变量中:
- Windows命令行:
set PYTHONPATH=你的project路径\Scripts python Test.py - Linux/macOS终端:
export PYTHONPATH=/你的project路径/Scripts python Test.py
内容的提问来源于stack exchange,提问作者Optional_Karl
相关产品推荐
相关产品推荐

