pip-audit:Python 依赖安全扫描工具
pip-audit 是 PyPA(Python Packaging Authority)维护的依赖安全扫描工具,用于检查 Python 环境和依赖文件中是否存在已知漏洞。数据来源是 Python Packaging Advisory Database,通过 PyPI JSON API 或 OSV 查询。
和 npm audit 类似,但 pip 本身没有内置 audit 功能,pip-audit 填补了这个空缺。
安装
pip install pip-audit
需要 Python 3.10+。也支持 conda 安装:
conda install -c conda-forge pip-audit
基本用法
扫描当前环境
pip-audit
直接扫描当前虚拟环境中安装的所有包,输出有漏洞的包及 CVE 编号。
扫描 requirements 文件
pip-audit -r requirements.txt
扫描项目路径
pip-audit /path/to/project
会自动识别项目中的依赖文件(requirements.txt、pyproject.toml、setup.cfg 等)。
扫描 lock 文件
pip-audit --locked /path/to/project
输出格式
默认是列格式,支持多种输出:
pip-audit -f json # JSON
pip-audit -f markdown # Markdown 表格
pip-audit -f cyclonedx-json # CycloneDX SBOM
pip-audit -f cyclonedx-xml # CycloneDX SBOM
JSON 格式适合接入 CI/CD 流水线做自动化处理,CycloneDX 格式可以生成 SBOM(软件物料清单)。
自动修复
pip-audit --fix
--fix 会自动升级有漏洞的依赖到安全版本。加 --dry-run 可以预览修复结果而不实际执行:
pip-audit --fix --dry-run
漏洞源
pip-audit 支持三个漏洞数据库:
- PyPI(默认):通过 PyPI JSON API 查询,数据来自 Python Packaging Advisory Database
- OSV:Google 的开源漏洞数据库,覆盖范围更广
- ESMS:Ecosystem SBOM Service
切换漏洞源:
pip-audit -s osv
实用参数
| 参数 | 作用 |
|---|---|
-l / --local | 只显示本地安装的包,跳过依赖的依赖 |
-S / --strict | 依赖收集失败时直接报错退出 |
--skip-editable | 跳过 editable 模式安装的包 |
--no-deps | 不做依赖解析,要求所有包锁定精确版本 |
--ignore-vuln ID | 忽略指定漏洞(可多次使用) |
-o FILE | 输出到文件 |
--require-hashes | 要求 requirements 中有 hash 校验 |
集成 CI/CD
Gitea Actions
pip-audit 有官方 GitHub Action,Gitea Actions 兼容该格式:
jobs:
pip-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pypa/gh-action-pip-audit@v1.1.0
with:
inputs: requirements.txt
pre-commit
- repo: https://github.com/pypa/pip-audit
rev: v2.10.1
hooks:
- id: pip-audit
args: ["-r", "requirements.txt"]
ci:
skip: [pip-audit]
注意 pre-commit.ci 不允许网络调用,所以 CI 环境中需要跳过。
和其他工具的对比
- safety:商业产品,漏洞数据库需要付费订阅,pip-audit 完全免费开源
- Snyk:SaaS 服务,需要注册账号,pip-audit 本地运行不传数据
- Trivy:通用扫描器(容器+依赖),pip-audit 专注 Python 生态,更轻量
pip-audit 的优势在于:PyPA 官方维护、MIT 协议、本地运行、复用 pip 缓存、支持自动修复。