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

如何在Pytest中设置默认项目目录解决FileNotFoundError

问题:测试阶段导入config.py时因文件路径报错

项目目录结构

root_project/
├── app
│   ├── default_photo_profile.jpg
│   ├── config.py
│   ├── __main__.py  # 应用为Python包,通过`python -m`运行
│   └── ...
├── tests
│   ├── test_unit.py  # 内部导入config.py
│   ├── functional  # 内部导入config.py
│   ├── pytest.ini
│   └── ...
...

问题描述

运行测试时,由于tests目录下不存在default_photo_profile.jpg,在导入config.py阶段直接报错。

config.py中读取文件的代码如下:

DEFAULT_PHOTO_FILE_PATH = Path('default_photo.jpg')
with open(file=DEFAULT_PHOTO_FILE_PATH, mode='rb') as file_obj:
    DEFAULT_PHOTO_BYTES = file_obj.read()

已尝试的无效/不符合需求的方案

  • 使用fixture模拟访问default_photo.jpg:无效,错误发生在导入阶段而非测试执行阶段
  • 在pytest命令行添加--rootdir app参数:无效(原因未知)
  • 在app.config.py中添加try/except捕获文件读取异常:可行但不符合需求,希望文件不存在时直接抛出错误
  • 在每个测试目录中放置default_photo.jpg:可行但实现繁琐
  • 修改os.path相关路径:实现方式不够优雅
  • 将tests纳入包(把__main__.py移到root_project):不确定是否为合理方案(经验不足)
  • 设置default_photo.jpg的绝对路径:会在生产服务器上失效

期望的可行解决方案

  • 在pytest.ini中设置根目录为root_project.app,模拟常规运行环境
  • 设置根目录为root_project.tests,将文件放在tests根目录即可被所有测试目录访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:45:33