You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Poetry中能否为含传递依赖的私有包使用explicit优先级?

Poetry中使用explicit优先级仓库时传递依赖无法找到私有包的问题

问题背景

我有三个由Poetry管理并发布在私有包仓库的Python包A、B、C:

  • B依赖A
  • C依赖B
  • 三者均额外依赖PyPI上的包

使用Poetry 1.5.1时,配置如下:

B/pyproject.toml

[tool.poetry.dependencies]
A = {version = "*", source = "my-private"}

[[tool.poetry.source]]
name = "PyPI"
priority = "primary"

[[tool.poetry.source]]
name = "my-private"
url = "https://gitlab.com/api/v4/groups/65473942/-/packages/pypi/simple"
priority = "explicit"

C/pyproject.toml

[tool.poetry.dependencies]
B = {version = "*", source = "my-private"}

[[tool.poetry.source]]
name = "PyPI"
priority = "primary"

[[tool.poetry.source]]
name = "my-private"
url = "https://gitlab.com/api/v4/groups/65473942/-/packages/pypi/simple"
priority = "explicit"

执行poetry lock时:

  • 项目B可以正常完成,能从私有仓库找到A,其他依赖从PyPI获取
  • 项目C执行失败,无法找到包A,推测Poetry尝试从PyPI获取A(该包仅存在于私有仓库)

核心问题

  1. 该行为是Poetry的设计意图还是Bug?
  2. 能否为包含传递依赖的私有仓库包使用explicit优先级?

解答

1. 这是Poetry的设计意图,并非Bug

explicit优先级的核心逻辑是:只有当依赖在pyproject.toml中明确指定source属性时,才会从对应仓库拉取该依赖。传递依赖不会继承上游包(比如B)中声明的source信息,Poetry会默认使用优先级最高的primary仓库(这里是PyPI)去查找传递依赖A,因此会出现找不到包的情况。

这种设计是为了严格遵循"显式声明"的原则,避免意外从私有仓库拉取未明确指定的包,同时也防止多私有仓库场景下的同名包冲突。

2. 可以使用explicit优先级,但需要额外配置

目前无法仅通过上游包的传递依赖让Poetry自动从explicit优先级仓库拉取传递依赖,必须通过额外配置来明确指定传递依赖的来源。

可行的临时方案(Poetry 1.8.3+)

在项目C的pyproject.toml中,通过**显式组(explicit group)**冗余声明传递依赖A,既不与项目直接依赖混淆,又能指定其来源:

[tool.poetry.dependencies]
B = {version = "*", source = "my-private"}

[tool.poetry.group.explicit.dependencies]
A = {version = "*", source = "my-private"}

[[tool.poetry.source]]
name = "my-private"
url = "https://gitlab.com/api/v4/groups/65473942/-/packages/pypi/simple"
priority = "explicit"

该方案符合官方文档要求,但需要手动维护传递依赖,属于临时解决方案。

替代方案(不推荐,安全性较低)

将私有仓库优先级改为default(旧版本Poetry),移除依赖中的source属性,此时所有包会先从私有仓库查找,找不到再 fallback 到PyPI。但这种方式在多私有仓库存在同名包时会失效,且无法避免误装PyPI上的同名包,安全性不如explicit优先级。

内容的提问来源于stack exchange,提问作者eNca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:52:47