如何用Poetry实现类似pip --extra-index-url的传递依赖解析功能?
使用Poetry实现企业内部多源依赖管理
可以实现,通过调整源配置和依赖指定方式即可匹配pip的行为,具体步骤如下:
1. 调整源优先级配置
将内部隔离仓库的优先级设为secondary(而非supplemental),确保Poetry优先从公网代理源解析依赖,仅在必要时尝试内部仓库:
[[tool.poetry.source]] name = "artifactory_release" url = "https://[COMPANY URL]/artifactory/api/pypi/pypi-release/simple" priority = "primary" [[tool.poetry.source]] name = "artifactory_unstable" url = "https://[COMPANY URL]/artifactory/api/pypi/python-internal-unstable/simple" priority = "secondary"
2. 指定单个包的来源
在依赖列表中明确标记内部包的来源,确保仅该包从内部仓库拉取,其传递依赖自动走primary源:
[tool.poetry.dependencies] python = "^3.10 <3.12" numpy = "1.23.5" pandas = "1.4.3" [MY PACKAGE] = {version = "[VERSION NO]", source = "artifactory_unstable"}
3. 排查常见问题
- 若仍出现解析错误,先清除内部仓库的Poetry缓存:
poetry cache clear --all artifactory_unstable - 确保使用Poetry 1.2.0及以上版本,旧版本对包级源指定的支持存在缺陷。
原理说明
Poetry的包级source指定仅作用于目标包本身,传递依赖会严格按照primary > secondary > supplemental的优先级顺序查找。将内部仓库设为secondary后,只有当primary源找不到对应包时才会尝试它——你的内部包仅存在于artifactory_unstable,因此会被正确拉取;而其传递依赖则从可访问公网的artifactory_release源获取,完全匹配pip的--index-url+--extra-index-url逻辑。
内容的提问来源于stack exchange,提问作者MikeFenton
相关产品推荐
相关产品推荐

