最轻量可复用的方式是用 pre-commit 钩子运行 pip-check,它不修改文件、仅报告已安装包的过期情况;但因 pip-check 已多年未维护,推荐改用 uv check,它原生解析 pyproject.toml 中声明的依赖并精准比对 pypi 版本。

用 pre-commit 钩子调用 pip-check
Git 提交前检查 Python 依赖是否过期,最轻量且可复用的方式是用 pre-commit 钩子跑 pip-check。它不修改任何文件,只报告哪些包有新版本可用,适合在 CI 前快速拦截明显过时的依赖。
先确保已安装: pip install pip-check pre-commit
在项目根目录初始化钩子配置:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks: []
- repo: local
hooks:
- id: pip-check
name: Check for outdated pip packages
entry: pip-check -q
language: system
types: [python]
files: ^(?:requirements|pyproject\.toml|setup\.py)$
注意:pip-check 默认只检查当前虚拟环境中的已安装包,不会解析 requirements.txt 或 pyproject.toml 的声明版本——它查的是「你实际装了什么、有没有更新」,不是「声明的版本是否最新」。
- 如果项目用
venv或poetry,确保钩子运行时激活了对应环境,否则会检查错地方 -
-q参数让输出更干净,有更新时才报错;没输出即通过 -
files正则只是触发条件,不影响pip-check的扫描范围
用 pyproject.toml + uv check 替代 pip-check
pip-check 已多年未维护,遇到较新打包格式(如 PEP 621 的 pyproject.toml)可能漏报。推荐改用 uv 的 uv check,它原生支持解析 [project.dependencies] 并比对 PyPI 最新版本,更准更快。
安装后,在 .pre-commit-config.yaml 中替换钩子:
- id: uv-check name: Check outdated dependencies with uv entry: uv check --no-dev language: system types: [python] files: ^pyproject\.toml$
关键差异:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
-
uv check读取pyproject.toml中声明的依赖,不依赖本地已安装状态 -
--no-dev排除[project.optional-dependencies],避免开发依赖干扰主逻辑 - 若项目仍用
requirements.txt,需先转成pyproject.toml,uv不直接支持该格式
为什么不能在 commit-msg 钩子里做依赖检查
commit-msg 钩子接收的是提交信息文件路径,此时 Git 已完成暂存区快照但尚未写入对象库——但依赖检查需要读取代码文件(如 pyproject.toml)和联网查 PyPI,这两者都与提交信息无关。强行在这里做,会导致:
- 每次提交无论改不改依赖,都强制执行检查,拖慢流程
- 无法关联到具体修改的依赖文件(比如你只改了
README.md,却要查一遍所有包) - 错误提示出现在「写完提交信息之后」,用户修正成本高
真正该用 commit-msg 的场景是校验提交信息格式(如 Conventional Commits),而不是依赖状态。
CI 中补一道防线:用 pip-outdated 或 pipdeptree
本地 pre-commit 可被绕过(比如加 --no-verify),所以 CI 流程里必须再跑一次。推荐用 pip-outdated(轻量)或 pipdeptree --warn outdated(带依赖树)。
GitHub Actions 示例片段:
- name: Check for outdated dependencies
run: |
pip install pip-outdated
pip-outdated --exit-code-on-outdated
注意点:
-
pip-outdated默认只检查直接依赖,加--recursive会变慢且易误报(间接依赖更新常不需人工干预) - CI 环境应使用与开发一致的 Python 版本和依赖解析方式(例如都用
uv pip install),否则版本判断可能不一致 - 别把「有更新」当成构建失败的硬性条件——有些包更新可能破坏兼容性,需人工确认
真正难的不是查出哪些包旧了,而是判断该不该升、升到哪一版、要不要同步改代码。工具只能提醒,决策还得人来。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










