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

如何在pytest中忽略venv目录下第三方库的警告?

如何屏蔽pytest中venv目录第三方库的警告,保留自有代码警告

问题场景

运行pytest时,会同时收到自有代码和venv目录下第三方库的警告,希望仅保留自有代码的警告,屏蔽第三方库的:

============================================ warnings summary ============================================ 
test_auth.py: 3 warnings
  C:\Users\User\<my project>\security.py:33: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
    expire = datetime.utcnow() + timedelta(days=settings.REFRESH_TOKEN_EXPIRE_DAYS)

test_auth.py: 2 warnings
  C:\Users\User\<my project>\venv\Lib\site-packages\jose\jwt.py:311: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
    now = timegm(datetime.utcnow().utctimetuple())

解决方案

1. 修改pytest配置文件(持久化推荐)

在项目根目录创建或修改配置文件,添加路径过滤规则:

用pytest.ini的写法:

[pytest]
# 忽略所有来自venv目录的警告
filterwarnings =
    ignore:::*/venv/*

该规则会匹配所有路径包含venv的警告源,直接忽略,不影响自有代码的警告输出。

用pyproject.toml的写法:

[tool.pytest.ini_options]
filterwarnings = [
    "ignore:::*/venv/*",
]

2. 自定义conftest.py钩子函数

如果需要更灵活的控制,可在项目根目录的conftest.py中添加自定义警告处理逻辑:

import warnings
import os

def pytest_configure(config):
    # 获取项目根目录(conftest.py所在目录)
    project_root = os.path.abspath(os.path.dirname(__file__))
    # 拼接venv绝对路径
    venv_abs_path = os.path.join(project_root, "venv")

    def venv_warning_filter(message, category, filename, lineno, file=None, line=None):
        # 检查警告文件路径是否在venv目录内
        if venv_abs_path in os.path.abspath(filename):
            return None  # 忽略该警告
        # 非venv目录的警告正常输出
        return warnings._showwarnmsg_impl(message, category, filename, lineno, file, line)

    # 替换默认的警告显示函数
    warnings.showwarning = venv_warning_filter

这种方式可根据需求扩展过滤逻辑,比如仅忽略特定类型的第三方警告。

3. 命令行临时过滤

如果只是临时需要屏蔽venv警告,无需修改配置文件,直接用命令行参数:

pytest -W ignore:::*/venv/*

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:57:06