跳到内容

依赖机器人

定期更新依赖项被视为最佳实践,这样可以避免暴露于漏洞中、限制依赖项之间的不兼容性,并避免在从过旧版本升级时遇到复杂的升级问题。各种工具可以通过创建自动拉取请求 (Pull Request) 来帮助保持更新。其中一些工具已经支持 uv,或者正在开发对 uv 的支持。

Renovate

uv 已得到 Renovate 的支持。

uv.lock 输出

Renovate 通过检查是否存在 uv.lock 文件来判断项目是否使用 uv 管理依赖,并将建议升级 项目依赖可选依赖开发依赖。Renovate 将同时更新 pyproject.tomluv.lock 文件。

您还可以通过启用 lockFileMaintenance 选项,定期刷新锁文件(例如用于更新传递依赖项)。

renovate.json5
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  lockFileMaintenance: {
    enabled: true,
  },
}

内联脚本元数据

Renovate 支持更新使用 内联脚本元数据 定义的依赖项。

由于它无法自动检测哪些 Python 文件使用了内联脚本元数据,因此需要使用 managerFilePatterns 显式定义其位置,如下所示:

renovate.json5
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  pep723: {
    managerFilePatterns: [
      "docs/build.py",
      "scripts/**/*.py",
    ],
  },
}

注意

Renovate 尚不支持更新与脚本关联的锁文件(https://github.com/renovatebot/renovate/issues/33591),因此如果您在脚本中依赖此功能,则需要手动更新锁文件。

依赖项冷却时间

如果您使用了 exclude-newer 选项,建议在 Renovate 中设置对应的 minimumReleaseAge 选项,以避免出现 uv 无法锁定依赖项的拉取请求。

例如,如果您将 exclude-newer 设置为 1 week,您可以设置:

renovate.json5
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",

  // Enable only for PyPI.
  packageRules: [
    {
      matchDatasources: ["pypi"],
      minimumReleaseAge: "1 week",
    },
  ],

  // Or enable for every ecosystem.
  minimumReleaseAge: "1 week",
}

Dependabot

Dependabot 已宣布支持 uv,但仍有一些用例尚未正常工作。有关更新,请参阅 astral-sh/uv#2512

Dependabot 支持更新 uv.lock 文件。要启用此功能,请在 dependabot.ymlupdates 列表中添加 uv package-ecosystem

dependabot.yml
version: 2

updates:
  - package-ecosystem: "uv"
    directory: "/"
    schedule:
      interval: "weekly"

依赖项冷却时间

如果您使用了 exclude-newer 选项,建议在 Dependabot 中设置对应的 cooldown 选项,以避免出现 uv 无法锁定依赖项的拉取请求。

例如,如果您将 exclude-newer 设置为 1 week,您可以设置:

dependabot.yml
version: 2

updates:
  - package-ecosystem: "uv"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7