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

使用Pytest测试Python源码时遭遇导入相关错误求助

解决方案

1. 修复路径查找的上下文问题

错误根源是get_config函数执行时tmp_path为None,本质是Pytest运行时的工作目录(CWD)不是项目根目录,导致get_project_path()找不到conf/base目录。

  • 手动传入项目根路径:
    修改src/functions/calc2.py,通过文件路径推导项目根目录(根据你的目录结构调整层级):
    import os
    from pda.utils.generics import get_project_path
    
    current_file_dir = os.path.dirname(os.path.abspath(__file__))
    project_root = os.path.dirname(os.path.dirname(current_file_dir))
    project_dir = get_project_path(path=project_root)
    
    def add(a, b):
        return a + b
    

2. 延迟初始化项目路径

避免在模块导入阶段执行get_project_path(),改为在需要时才初始化:

from pda.utils.generics import get_project_path

_project_dir = None

def get_project_dir():
    global _project_dir
    if _project_dir is None:
        _project_dir = get_project_path()
    return _project_dir

def add(a, b):
    # 如果add需要用到项目路径,再调用get_project_dir()
    return a + b

这样Pytest收集测试代码时不会触发路径查找,只有当测试实际调用到依赖路径的逻辑时才执行初始化。

3. 配置Pytest运行环境

在项目根目录创建pytest.ini文件,指定工作目录和Python路径:

[pytest]
testpaths = tests
pythonpath = .

这会让Pytest以项目根目录作为工作目录启动,确保get_project_path()能正确定位到conf/base目录。

4. 检查第三方库逻辑

如果以上方法无效,查看pda.utils.generics.get_config的源码,确认当找不到目标目录时是否返回了None(而非抛出异常)。可以考虑给get_config添加默认路径,或者升级pda库到最新版本,看是否修复了路径查找的bug。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:39:23