如何在一个Poetry构建的模块中使用另一Poetry构建的私有模块
私有Poetry包依赖配置解决方案
最佳实践流程
你无法直接用poetry add拉取私有包的核心原因是Poetry默认没有配置你的GitLab私有仓库索引,按以下步骤配置即可:
- 首先在Poetry中添加GitLab私有源,推荐设置为
supplemental优先级,避免公共包被私有源劫持:
poetry source add --priority=supplemental gitlab_pypi https://<你的GitLab域名>/api/v4/projects/<对应module_a的项目ID>/packages/pypi/simple/
- 配置私有源认证信息,使用有
read_package_registry权限的GitLab个人访问令牌即可:
poetry config http-basic.gitlab_pypi <你的GitLab用户名> <你的个人访问令牌>
配置完成后直接执行poetry add module_a,Poetry会自动拉取对应包并将依赖写入配置文件。
手动写入pyproject.toml的方法
你也可以直接修改项目配置文件完成配置,无需提前执行命令:
- 先在pyproject.toml中添加私有源声明:
[[tool.poetry.source]] name = "gitlab_pypi" url = "https://<你的GitLab域名>/api/v4/projects/<对应module_a的项目ID>/packages/pypi/simple/" priority = "supplemental"
- 在依赖块中添加module_a的版本声明:
[tool.poetry.dependencies] python = "^3.8" # 保持你原有python版本要求不变 module_a = "^1.0.0" # 替换为你需要的module_a实际版本号
修改完成后执行poetry install即可自动安装所有依赖。
module_b单独安装说明
不需要手动同时安装两个模块。只要你按上述步骤将module_a正确配置为module_b的依赖,后续用户安装module_b时:
- 若使用Poetry安装:用户本地配置好同一个GitLab私有源的权限后,执行
poetry add module_b会自动解析并安装module_a依赖 - 若使用pip安装:执行
pip install module_b --extra-index-url <私有源地址>即可自动拉取全部依赖
仅需在module_b的分发文档中补充私有源的配置说明,避免无权限的用户拉取依赖失败。
内容的提问来源于stack exchange,提问作者Martin Becuwe
相关产品推荐
相关产品推荐

