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

采用src目录布局的Python项目如何正确执行PyTest?

嘿,我之前也踩过这个src目录布局的pytest坑,尤其在Python 3.5和pytest 3.5.0这种稍老的版本组合下,确实容易碰到模块找不到的问题。给你几个经过验证的解决办法,按推荐程度排序:

1. 安装可编辑版本的包(最稳妥)

这种方法会把你的本地包注册到Python的site-packages里,让系统全局能识别到,不管从哪个目录运行pytest都没问题。

步骤如下:

  • 首先在项目根目录(就是包含src和tests文件夹的那个目录)创建一个setup.py文件,内容如下:
from setuptools import setup, find_packages

setup(
    name="your_package",  # 替换成你的实际包名
    version="0.1.0",
    packages=find_packages(where="src"),
    package_dir={"": "src"},  # 告诉setuptools从src目录查找包
)
  • 然后在项目根目录运行命令:
pip install -e .
  • 之后不管你在根目录还是tests目录下直接运行pytest,都能正常导入你的包了。
2. 通过conftest.py手动添加src路径到Python环境

如果你不想安装可编辑版本,可以通过pytest的conftest.py机制自动把src目录加入Python的搜索路径:

  • 在tests目录下创建一个conftest.py文件,内容如下:
import sys
from pathlib import Path

# 计算src目录的绝对路径
src_dir = str(Path(__file__).parent.parent / "src")
# 把src目录插入到sys.path最前面,确保优先找到本地包
sys.path.insert(0, src_dir)
  • 之后直接在项目根目录或者tests目录运行pytest即可,pytest会自动加载这个conftest.py,帮你搞定路径问题。
3. 使用pytest的--pyargs参数

如果你已经通过其他方式让Python能识别到你的包(比如手动设置了PYTHONPATH环境变量),可以在项目根目录运行:

pytest --pyargs your_package

这个参数会让pytest直接定位到你的包对应的测试文件,跳过路径查找的问题。

额外注意事项
  • 确保你的包目录(比如src/your_package)下存在__init__.py文件,Python 3.5仍然需要这个文件来识别这是一个可导入的包。
  • 测试文件里的导入要使用绝对路径,比如import your_package或者from your_package.core import some_function,不要用相对导入(比如from ..src.your_package import ...),避免路径混乱。
  • 不要在tests目录下创建和你的包同名的文件或文件夹,否则会和src里的包产生命名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:05