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

如何在Python unittest中解决同项目跨文件函数引用问题

解决Python unittest无法导入同项目模块的问题

核心原因

Python默认只会搜索当前运行目录、标准库目录及已安装第三方包的目录。你的测试文件在tests目录下,被测模块位于src/mfut,不在默认搜索路径内,因此触发ModuleNotFoundError。


方案一:用可编辑模式安装项目(最符合PyPI规范)

这是官方推荐的正规做法,无需修改环境变量,既能让Python正确识别模块,也为后续打包发布铺路。

  1. 在项目根目录(My Fun Unit Testing)创建pyproject.toml:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "mfut"
version = "0.1.0"
  1. (可选)在根目录创建setup.cfg,明确包结构:
[metadata]
name = mfut
version = 0.1.0

[options]
packages = find:
package_dir =
    = src
  1. 在项目根目录执行命令:
pip install -e .

该命令会将项目以"可编辑"模式安装到Python环境,相当于给src目录创建软链接到site-packages,无论在哪个目录运行测试,都能正常导入模块。

之后在all_tests.py中正常导入:

from unittest import TestCase
from math import inf
from mfut.mfut import conditionallyClose

class onlyTestCase(TestCase):
    # 原有测试方法不变

如果想简化导入,在src/mfut下创建__init__.py:

from .mfut import conditionallyClose

这样就能直接用from mfut import conditionallyClose导入函数。


方案二:在测试文件中动态添加src路径(无需安装)

不想安装项目的话,可在测试文件开头添加代码,动态将src目录加入模块搜索路径,路径基于文件绝对位置,避免相对路径的问题:

修改all_tests.py的开头:

import os
import sys
# 获取当前测试文件的绝对路径所在目录
tests_dir = os.path.dirname(os.path.abspath(__file__))
# 推导项目根目录(tests的上一级)
project_root = os.path.dirname(tests_dir)
# 将src目录加入搜索路径最前端
src_dir = os.path.join(project_root, "src")
sys.path.insert(0, src_dir)

from unittest import TestCase
from math import inf
from mfut.mfut import conditionallyClose

class onlyTestCase(TestCase):
    # 原有测试方法不变

方案三:运行测试时临时设置PYTHONPATH(快速测试用)

在项目根目录执行测试时,临时把src目录加入PYTHONPATH,仅当前命令生效,不影响全局环境:

  • Windows命令行:
set PYTHONPATH=src && python -m unittest tests/all_tests.py
  • Linux/macOS终端:
PYTHONPATH=src python -m unittest tests/all_tests.py

推荐的测试执行方式

无论用哪种方案,建议用unittest的模块方式运行测试,而非直接打开测试文件:

# 方案一安装后,任意目录可运行
python -m unittest tests.all_tests
# 自动发现tests目录下所有测试文件
python -m unittest discover tests

内容的提问来源于stack exchange,提问作者Dan C. Wlodarski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:15:32