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

Python项目遇ModuleNotFoundError,集成测试无法执行

问题根源

这是Python模块搜索路径(sys.path)的问题。你的项目采用src布局后,根目录不在Python的默认搜索路径里,运行测试时Python找不到顶级的cryptotax模块;而如果测试里加src.前缀导入,包内部的绝对导入又会因为找不到顶级cryptotax而报错——本质是不同运行场景下,sys.path的包含目录不一致导致的。

解决方案

以下几种方法按推荐程度排序:

1. 安装可编辑模式包(最优解)

这是Python src布局项目的标准做法,能彻底解决所有路径问题:

  • 在项目根目录执行命令,把包安装为可编辑模式(代码修改后立即生效,无需重新安装):
    pip install -e .
    
  • 之后不管在哪个目录,都能直接导入cryptotax模块。直接在根目录运行测试即可:
    pytest Tests/
    
    测试文件里的from cryptotax.[module] import ...导入无需修改,包内部的绝对导入也能正常工作。

2. 配置pytest自动添加src路径

如果不想安装包,可以通过pytest配置让它自动把src目录加入模块搜索路径:

  • 在项目根目录创建pytest.ini文件,写入以下内容:
    [pytest]
    pythonpath = ./src
    
  • 之后直接在根目录运行测试:
    pytest Tests/
    
    测试文件的导入语句保持cryptotax.[module]即可,无需修改任何代码。

3. 临时修改测试文件的sys.path(快速临时方案)

在测试文件的最顶部添加代码,手动将src目录加入Python的搜索路径:

import sys
from pathlib import Path

# 从测试文件所在路径向上两级,找到根目录下的src文件夹
src_dir = Path(__file__).resolve().parent.parent / "src"
sys.path.append(str(src_dir))

这种方法无需额外配置,但每个测试文件都要加这段代码,路径依赖测试文件的位置,长期维护不推荐。

4. 改用相对导入(不推荐)

修改包内部的导入语句为相对导入(比如把from cryptotax.config import ...改成from .config import ...),同时测试文件里用from src.cryptotax.[module] import ...导入。但这种方法会破坏包的正常导入逻辑,导致直接运行包时可能出现问题,不建议采用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:22:39