pip-audit不能自动修复漏洞,只能报告和建议升级路径;它不修改requirements.txt或重装包,修复必须手动干预。

pip-audit 不能自动修复漏洞,只能报告和建议升级路径;它不修改 requirements.txt 或重装包,修复必须手动干预。
为什么 pip-audit 扫描结果里有些漏洞标为 “skipped”?
常见原因是目标包未在 PyPI 上公开披露 CVE(比如私有包、本地安装的 .whl 或 git+https 依赖),或版本号格式不被 pip-audit 的解析器识别(如 1.2.3.dev0、2.0.0a1)。它只查 PyPI 官方安全数据库(pip-audit 自带的 pip-api + osv.dev 镜像),不扫描源码或二进制内容。
解决建议:
- 确保所有包都通过
pip install从 PyPI 安装(而非pip install -e .或本地路径) - 运行前先执行
pip install --upgrade pip-audit,新版对 PEP 440 版本兼容性更好 - 对跳过的包,单独用
pip show <pkg>查版本,再手动去 osv.dev 搜 CVE
如何让 pip-audit 扫描 requirements.txt 而不是当前环境?
pip-audit 默认检查已安装的包(即 pip list 输出),要扫文件需配合 --requirement 参数。但注意:它不会解析 -r base.txt 这类嵌套引用,也不处理注释或环境标记(如 pyyaml; platform_system == "Windows")。
立即学习“Python免费学习笔记(深入)”;
实操步骤:
- 先用
pip-compile requirements.in(来自pip-tools)生成扁平化、无条件的requirements.txt - 再运行
pip-audit --requirement requirements.txt - 若想同时忽略某些低风险 CVE,加
--skip <code>CVE-2022-1234(注意是双短横)
pip-audit 报告的 “fix versions” 为什么有时不可用?
它给出的修复版本只是上游声明“已修复该 CVE”的最低版本,但实际能否升级取决于你的项目兼容性。比如报告说 requests<2.30.0 有漏洞,推荐升到 2.30.0,但如果你代码里用了已被移除的 requests.packages.urllib3,升上去就直接报 AttributeError。
关键判断点:
- 查看该包的 CHANGELOG 或 GitHub Releases,确认修复版本是否含破坏性变更
- 用
pip install --dry-run requests==2.30.0测试依赖冲突(需 pip ≥ 23.1) - 对无法直接升级的包,考虑临时用
--skip屏蔽,并在 issue tracker 记录技术债
真正麻烦的从来不是发现漏洞,而是确认某个“修复版本”在你那个调用了 3 层私有封装、又打了 2 个 monkey patch 的服务里,到底会不会让登录接口返回 500。


















