运行unittest测试时遇ModuleNotFoundError:找不到'dao'模块
Fixing ModuleNotFoundError: No module named 'dao' When Running Unittest
我之前也踩过这个一模一样的坑!明明文件夹就在那儿,Python却死活找不到,核心原因就是你的dao模块所在的根目录不在Python的搜索路径(sys.path)里。
先理清楚你的路径结构:
- 测试文件路径:
C:\Users\stacey\Documents\MERLIN\MERLIN - WORKING\dao_all\dao\iotools\tests\test_blbmktdata.py dao模块的实际根目录是C:\Users\stacey\Documents\MERLIN\MERLIN - WORKING\dao_all(因为dao文件夹直接在这个目录下)
当你在终端运行python -m unittest test_blbmktdata.py时,Python默认只会把当前执行命令的目录加入搜索路径,它不知道要往上找dao_all这个目录,所以就抛出了ModuleNotFoundError。
下面给你几个实用的解决办法:
方案一:在测试文件中手动添加路径(最稳妥)
在test_blbmktdata.py的最顶部(所有导入语句之前)加入这段代码,让Python明确知道你的模块根目录位置:
import sys from pathlib import Path # 获取当前测试文件的绝对路径 test_file_path = Path(__file__).resolve() # 往上三级找到dao_all目录(tests → iotools → dao → dao_all) root_dir = test_file_path.parent.parent.parent.parent # 将根目录加入Python的搜索路径 sys.path.append(str(root_dir))
添加完之后再运行测试,Python就能顺利找到dao模块了。
方案二:通过环境变量指定路径
在运行测试命令之前,先把dao_all目录添加到PYTHONPATH环境变量中,这样Python会自动搜索这个路径下的模块:
- 如果你用的是Windows命令行:
set PYTHONPATH=C:\Users\stacey\Documents\MERLIN\MERLIN - WORKING\dao_all python -m unittest test_blbmktdata.py - 如果你用的是PowerShell:
$env:PYTHONPATH = "C:\Users\stacey\Documents\MERLIN\MERLIN - WORKING\dao_all" python -m unittest test_blbmktdata.py
方案三:检查并添加__init__.py文件
别忘了,Python要求每个作为模块的文件夹下都要有__init__.py文件(可以是空文件),这样才会把它识别为可导入的模块。检查一下你的dao、iotools文件夹下有没有这个文件,如果没有的话,新建一个空的__init__.py就行。
注意:相对导入(比如
from ..blbmktdata import *)虽然看起来简单,但在运行unittest时很容易因为模块结构问题报错,所以不推荐用这个方法。
内容的提问来源于stack exchange,提问作者Stacey
相关产品推荐
相关产品推荐

