Python包无法推送至Azure DevOps Artifacts Feed问题求助
Azure DevOps Artifacts 发布私有Python包报错问题
问题背景
我正尝试将仅限本组织成员使用的Python包发布至Azure DevOps Artifacts,使用的Azure Pipeline配置如下:
trigger: - main pool: vmImage: ubuntu-latest steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.7' displayName: 'Use Python 3.7' - script: | python -m pip install --upgrade pip python -m pip install --upgrade build setuptools twine python -m build pip install -r requirements.txt displayName: 'Install dependencies' - script: | pip install pytest pytest-azurepipelines pytest displayName: 'pytest' # Publish code to a previously created feed - task: TwineAuthenticate@1 inputs: artifactFeed: feed-name - script: | python -m twine upload -r feed-name --config-file $(PYPIRC_PATH) dist/*.whl
但流水线的CmdLine步骤执行失败,报错信息如下:
Received "500: Internal Server Error - Failed to retrieve data from the upstream package source 'https://pypi.org/': Forbidden (Forbidden) (DevOps Activity ID: some-id-string)"
同时尝试本地构建包并推送至该feed,也出现完全相同的错误,有以下疑问:
- 如何解决这个报错?
- 我的包是本地代码,PyPI上没有相关包,为什么会涉及PyPI作为上游源?
- 我要发布仅限组织内部使用的私有包,为什么会提到PyPI?是否不需要使用twine?
解答
1. 报错解决方法
这个错误的根源是你的Azure Artifacts feed默认配置了PyPI作为上游源,但当前环境无法正常访问PyPI导致的。解决步骤:
- 登录Azure DevOps,进入目标feed的设置页面
- 找到「上游源」选项,删除PyPI的上游源配置
- 保存设置后,重新运行流水线或执行本地推送操作即可
如果之后需要通过该feed拉取PyPI上的公共依赖包,可以再重新添加PyPI上游源,并确保配置了正确的访问权限(比如允许feed访问公共外部源)。
2. 为什么会涉及PyPI作为上游源
Azure Artifacts的feed默认会自动添加PyPI作为上游源,设计目的是让这个feed可以同时承载私有包和从PyPI同步的公共包。即便你要发布的是本地私有包,推送操作触发时,feed会检查自身的上游源配置,一旦发现配置了PyPI但无法访问,就会抛出这个错误。
3. 私有包是否需要twine?为什么提到PyPI?
- 发布Python包到Azure Artifacts必须使用twine:twine支持安全的身份验证和包上传流程,Azure DevOps提供的
TwineAuthenticate@1任务也是专门配合twine实现身份验证的,所以不能省略twine。 - 提到PyPI完全是因为feed默认开启了上游源配置,和你的私有包本身没有关系。只要按照第一个问题的方法移除PyPI上游源,就不会再出现相关错误,你的包依然是仅限组织内部成员访问的私有包。
内容的提问来源于stack exchange,提问作者FaCoffee
相关产品推荐
相关产品推荐

