使用Poetry时如何避免pyproject.toml暴露私有仓库地址
解决方案
完全不需要将私有仓库地址硬编码到pyproject.toml提交到版本库,Poetry原生支持两种不暴露内部地址的配置方式:
方式1:使用Poetry本地配置(推荐本地开发使用)
Poetry的源配置可以不写入pyproject.toml,而是存储在用户全局配置文件(类Unix系统路径为~/.config/pypoetry/config.toml,Windows路径为%APPDATA%\pypoetry\config.toml),或者项目本地的poetry.toml中,其中poetry.toml可以直接加入.gitignore规则,不会被提交到版本库。
直接执行以下命令添加源即可:
# 全局配置第一个私有源地址 poetry config repositories.my_private_repo_1 https://my_private_repo1.com/simple # 全局配置第二个私有源地址 poetry config repositories.my_private_repo_2 https://my_private_repo2.com/simple # 设置第一个私有源为默认下载源 poetry config repositories.default my_private_repo_1
如果只想让配置对当前项目生效,在上述命令末尾加--local参数即可,配置会写入项目根目录下的poetry.toml,不会修改全局配置,也不会改动pyproject.toml内容。
方式2:使用环境变量配置(推荐CI/CD或多环境场景使用)
Poetry原生支持通过环境变量指定仓库地址,完全不需要修改任何项目内的配置文件。
环境变量命名规则为POETRY_REPOSITORIES_<源名称全大写>_URL,对应你的两个私有源,需要配置的环境变量如下:
# 第一个私有源地址 POETRY_REPOSITORIES_MY_PRIVATE_REPO_1_URL=https://my_private_repo1.com/simple # 第二个私有源地址 POETRY_REPOSITORIES_MY_PRIVATE_REPO_2_URL=https://my_private_repo2.com/simple
如果需要指定默认源,额外配置一个环境变量即可:
# 将my_private_repo_1设置为默认下载源 POETRY_DEFAULT_REPOSITORY=my_private_repo_1
团队成员只需要在本地shell配置文件、或者CI流水线的环境变量配置中写入上述值,就能正常拉取私有包,pyproject.toml可以直接提交到版本库,不会泄露任何内部服务地址。
注意:如果你之前已经在
pyproject.toml中写过[[tool.poetry.source]]相关配置,需要先把这些段落全部删除,避免不同位置的配置产生冲突。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

