Python unittest运行时无法导入其他模块 该如何解决
问题原因
出现该报错的核心原因是Python运行时的模块搜索路径中没有包含项目根目录,导致target.py导入同目录下的utils.py时无法定位到对应文件。
修复方案
方案1:将目录转为标准Python包(最通用)
- 在
application目录下新建空文件__init__.py - 在
tests目录下新建空文件__init__.py - 在测试文件中使用绝对导入引入需要测试的模块,示例:
from application.target import 你需要的类/方法
- 配置完成后在
project_root目录下直接执行py -m unittest discover即可正常运行
方案2:临时添加模块搜索路径
在所有测试文件的开头添加以下代码,主动把项目根目录加入Python搜索路径:
import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent.resolve()))
后续正常导入application下的模块即可。
方案3:执行命令时指定PYTHONPATH环境变量
运行测试命令前临时把当前项目根目录加入搜索路径:
- Windows cmd环境执行:
set PYTHONPATH=%cd% && py -m unittest discover - Windows PowerShell环境执行:
$env:PYTHONPATH=$PWD.Path; py -m unittest discover - Linux/macOS环境执行:
PYTHONPATH=. py -m unittest discover
方案4:配置项目结构(长期项目推荐)
在project_root下新建pyproject.toml配置文件,添加如下内容将源码目录纳入包搜索范围:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["application"]
然后在project_root目录下执行pip install -e .安装可编辑版本的项目,之后无需额外配置即可在任意位置正常运行测试。
内容的提问来源于stack exchange,提问作者rsigs
相关产品推荐
相关产品推荐

