Python3导入外部模块时无法找到其内部子模块该如何解决?
Python同目录子模块导入错误解决方案
错误原因
运行
test1.py时,Python的模块搜索路径sys.path默认仅包含运行脚本所在的tests目录、以及执行命令时的当前工作目录,不会自动包含model文件夹的路径。model.py中写的import module是顶层导入语法,Python只会在sys.path里搜索名为module的模块,自然找不到存放在model子目录下的module.py。
可行解决方案
方案1:使用相对导入(最规范,无需额外配置路径)
- 先在
model文件夹下新增一个空的__init__.py文件(标记该文件夹为合法Python包,兼容所有Python3版本) - 把
model.py里的导入代码修改为相对导入:
from . import module
- 运行脚本时从项目根目录执行以下命令即可:
python -m tests.test1
- 注意不要直接使用
python tests/test1.py运行,该语法会把tests目录加入sys.path,破坏包层级识别。
方案2:使用绝对导入(适配所有运行场景)
- 把
model.py里的导入代码修改为从顶层包导入:
from model import module
- 如果运行时还是提示找不到
model包,可以在test1.py最开头添加两行代码,自动将项目根目录加入模块搜索路径:
import sys, os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
修改完成后无论从哪个目录运行test1.py都可以正常识别模块。
方案3:修改环境变量(适合临时开发调试,无需改代码)
运行脚本前先把项目根目录加到PYTHONPATH环境变量即可:
- Linux/macOS终端执行:
export PYTHONPATH=你的项目根目录绝对路径:$PYTHONPATH python tests/test1.py
- Windows cmd执行:
set PYTHONPATH=你的项目根目录绝对路径;%PYTHONPATH% python tests\test1.py
- Windows PowerShell执行:
$env:PYTHONPATH = "你的项目根目录绝对路径;$env:PYTHONPATH" python tests\test1.py
内容的提问来源于stack exchange,提问作者pinnochio
相关产品推荐
相关产品推荐

