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

保持目录结构前提下解决单元测试模块b导入失败问题

解决Python单元测试的模块导入问题(保持目录结构不变)

这个问题我之前踩过坑,核心就是Python的模块搜索路径没配置对,咱们几个方案都能解决,而且完全不用改你现有的目录结构:

方案1:调整内部导入+配置路径(快速见效)

首先得先把src里的模块导入改成符合Python包规范的写法:
打开src/a.py,把原来的from b import B改成下面二选一:

  • 相对导入(适合同一包内的模块,更简洁):
    from .b import B
    
  • 绝对导入(结构清晰,包复杂时更推荐):
    from src.b import B
    

接下来解决测试时的路径问题,两种方式选一个就行:

方式A:临时设置环境变量

在终端运行测试前,先把项目根目录(就是包含src和test的那个文件夹)加到Python的搜索路径里:

# Linux/macOS 终端
export PYTHONPATH=.
python test/unit.py

# Windows CMD
set PYTHONPATH=.
python test/unit.py

# Windows PowerShell
$env:PYTHONPATH="."
python test/unit.py

方式B:在测试文件里自动加路径

不想每次输环境变量的话,直接在test/unit.py最开头加这段代码,自动把根目录加到搜索路径:

import sys
from pathlib import Path

# 定位到项目根目录(test的上级文件夹)
root_dir = Path(__file__).parent.parent
sys.path.append(str(root_dir))

# 后面的代码不变
import unittest
from src import a

class TestUtils(unittest.TestCase):
    def test_function(self):
        self.assertEqual(a.func(), 1)

if __name__ == '__main__':
    unittest.main()

方案2:用可编辑模式安装项目(长期维护首选)

如果这个项目要长期迭代,推荐把它做成可安装的Python包,一劳永逸解决导入问题:

  1. 在项目根目录创建一个setup.py文件,内容如下:
from setuptools import setup, find_packages

setup(
    name="my_project",
    version="0.1.0",
    packages=find_packages(where="src"),
    package_dir={"": "src"},
)
  1. 然后在终端执行这条命令,用pip安装可编辑模式:
pip install -e .

之后不管你在哪个目录,都能直接import src.a或者from src import b,运行程序和测试都不会再报导入错误了。

为啥原来会报错?

简单说:当你运行python test/unit.py时,Python只会把test目录加到它的模块搜索路径里,而你的src目录不在这个路径里。a.py里的from b import B是绝对导入,Python会在搜索路径里找b.py,自然找不到——毕竟b.py在src文件夹里。咱们上面的方案要么改导入方式让Python找对位置,要么把src所在的根目录加到搜索路径里,问题就解决了。

内容的提问来源于stack exchange,提问作者TrekMeisterGeneral

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:48