pip-audit扫描不到刚pip install的包,是因为它默认只审计当前环境已安装包(pip list输出),不解析requirements.txt或pyproject.toml中的版本约束;若全局安装新版而项目要求旧版,该旧版漏洞可能被漏报。

pip-audit 能快速发现已知漏洞包,但默认不检查本地安装的包是否满足项目约束,必须配合 requirements.txt 或虚拟环境使用,否则容易漏报。
为什么 pip-audit 扫描不到你刚 pip install 的包?
pip-audit 默认只审计当前环境中已安装的包(pip list 输出),但它不会主动解析 requirements.txt 或 pyproject.toml 中声明的依赖范围。如果你在全局 Python 环境中装了包,但项目实际要求的是旧版本(比如 django),而该旧版本有 CVE,pip-audit 却可能跳过——因为它只看到你装的 4.2.10(无漏洞),没看到约束本身隐含的风险。
- 始终在项目专用虚拟环境中运行
pip-audit,避免全局污染干扰结果 - 若项目用
pip-tools,先执行pip-compile生成锁定文件,再对requirements.txt审计 - 不推荐直接对开发机全局环境扫描:结果不可复现,且易忽略版本约束冲突
如何让 pip-audit 检查 requirements.txt 而不是当前环境?
用 -r 参数指定文件路径,pip-audit 会解析其中的包名和版本约束,并查询所有匹配版本的已知漏洞(不只是你当前装的那个)。这是最贴近真实项目风险的用法。
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
- 命令示例:
pip-audit -r requirements.txt --strict(--strict表示只要任一满足约束的版本有漏洞就报错) - 支持多文件:
pip-audit -r requirements/base.txt -r requirements/dev.txt - 注意:如果某行含
-e git+https://...或本地路径,pip-audit 会跳过——它只处理 PyPI 可索引的包 - 若
requirements.txt含注释或空行,不影响解析;但不能含--find-links等 pip 特定指令
遇到 “Failed to resolve package” 或 “No known vulnerabilities” 却不放心?
这两个提示常被误读。“Failed to resolve” 通常是因为包名拼写错误、大小写不符(如 PyYAML 写成 pyyaml),或用了非标准分发名(如 django-crispy-forms 实际在 PyPI 是 django-crispy-forms,但某些旧版 setup.py 声明为 crispy-forms);“No known vulnerabilities” 只代表当前解析出的版本不在已知漏洞数据库中,不代表绝对安全。
- 确认包名是否与 PyPI 页面 URL 一致:
https://pypi.org/project/<code>包名/ - 加
-v查看详细解析过程:pip-audit -r reqs.txt -v,重点关注 “Resolvedxxxto1.2.3” 这类日志 - 数据库更新有延迟,关键项目建议搭配
pip-audit --api-url https://api.osv.dev/v1/query使用 OSV 数据源(更及时) - 静态分析无法发现逻辑漏洞或配置错误,比如硬编码密钥、未校验的反序列化——这得靠其他工具补位
真正难的是判断一个 CVE 是否影响你的具体用法:pip-audit 只告诉你“这个版本有漏洞”,但不说明触发条件。比如 urllib3 的某个 CVE 需要开启特定代理配置才生效,而你的代码根本不用代理。这时候得人工查 CVE 描述,而不是盲目升级。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










