dependabot 仅升级 dependabot.yml 中明确配置的 package-ecosystem 和 directory 路径下的依赖,依赖识别需匹配锁文件与版本策略,忽略规则须按语义版本精确声明。

Dependabot 会升级哪些依赖?看 dependabot.yml 的 package-ecosystem 和 directory
Dependabot 不是全量扫你项目里所有文件,它只认配置里明确声明的生态和路径。比如你写 package-ecosystem: pip,它就只管 requirements.txt 或 pyproject.toml(得带 [build-system] 或 [project.dependencies]);写 directory: "/backend",那 /frontend/requirements.txt 就直接被忽略。
常见错误现象:Dependabot PR 没出现,或只升了部分依赖——八成是 directory 路径没对上,或者 pip 生态没识别到 pyproject.toml 的现代格式。
-
pyproject.toml必须含依赖声明段,纯构建配置(如[build-system])不触发升级 -
poetry项目需显式设package-ecosystem: poetry,不能靠文件名自动推断 - 子目录多环境时(如
/services/api/和/services/worker/),每个都要单独配directory
版本范围怎么写才让 Dependabot 真正生效?重点看 versioning-strategy 和锁文件
Dependabot 升级行为高度依赖你有没有锁文件,以及怎么写 versioning-strategy。它默认不改 requirements.txt 里的 == 版本,但会升 ~= 或 >= 范围——前提是存在 pip-compile 生成的 requirements.txt 锁文件,或 poetry.lock。
常见错误现象:PR 显示 “no updates available”,但明明有新补丁版——大概率是你用 pip install package 直接写死 ==1.2.3,没锁文件,Dependabot 就当这是“固定策略”,不碰。
立即学习“Python免费学习笔记(深入)”;
特色介绍: 1、ASP+XML+XSLT开发,代码、界面、样式全分离,可快速开发 2、支持语言包,支持多模板,ASP文件中无任何HTML or 中文 3、无限级分类,无限级菜单,自由排序 4、自定义版头(用于不规则页面) 5、自动查找无用的上传文件与空目录,并有回收站,可删除、还原、永久删除 6、增强的Cache管理,可单独管理单个Cache 7、以内存和XML做为Cache,兼顾性能与消耗 8、
-
versioning-strategy: lockfile-only是最稳的选择,只更新锁文件,不碰pyproject.toml的约束行 - 用
pip-tools的项目,确保 CI 中运行pip-compile --upgrade后提交requirements.txt -
poetry用户别关allow-prereleases: false,否则2.0.0b1这类预发布版永远进不来
为什么 Dependabot PR 总是失败?检查 update-config 和 CI 环境一致性
Dependabot PR 失败,90% 和你的 CI 流程有关,不是它配置错了。它拉起的 PR 默认复用你主分支的 .github/workflows/ci.yml,但环境变量、Python 版本、甚至 pip 版本可能不一致。
常见错误现象:pip install -r requirements.txt 在本地成功,在 Dependabot PR 中报 Could not find a version that satisfies...——往往因为 CI 里用了旧版 pip,不支持 PEP 660 或 pyproject.toml 构建逻辑。
- 在 CI 中加一步
python -m pip install --upgrade pip setuptools wheel - 避免在
setup.py里动态读取git describe或环境变量,Dependabot 构建时没 git history -
update-config里别设target-branch: dev,除非你确定dev分支的 CI 配置完全兼容主干依赖升级逻辑
跳过某些包不升级?用 ignore 列表,但注意通配符和语义版本边界
ignore 不是黑名单,它按语义版本规则匹配。写 dependency-name: "django" + versions: [",意思是“只要新版 >=4.2 就允许升”,而不是“永远不升 django”。想彻底禁用,得用 <code>versions: ["*"]。
常见错误现象:加了 ignore 还收到某包 PR——可能是通配符没生效,比如 "requests>=2.28.0" 在 requirements.txt 里,但 ignore 只写了 "requests",Dependabot 会按完整 spec 解析,匹配失败。
- 忽略整个包:用
dependency-name: "package-name"+versions: ["*"] - 忽略特定范围:写清楚
" 或 <code>"~>1.2",别用模糊描述如"old" - 多个包要分别列,
ignore不支持django, flask这种逗号分隔写法
Dependabot 的规则本质是「配置驱动 + 锁文件感知」,脱离锁文件谈升级策略,基本等于在猜;而跨生态混用(比如 pip 项目里塞了 nodejs 工具链)时,它的路径识别和版本解析很容易失效——这些地方最容易被当成“bug”去调,其实只是配置没对齐。









