You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:13:34