从Azure DevOps Python Artifacts feed进行pip安装不起作用

时间:2019-12-23 17:17:39

标签: python azure pip azure-devops azure-artifacts

当我尝试从Azure DevOps Artifacts feed中安装软件包时,出现错误消息:

Looking in indexes: https://pypi.org/simple, https://pkgs.dev.azure.com/company/company_Software/_packaging/PyPI/pypi/simple/
ERROR: Could not find a version that satisfies the requirement as-api (from versions: none)
ERROR: No matching distribution found for as-api

由于使用pip install -vvv可能会产生机密信息,因此我无法在此处提供完整的日志。请随时询问有关日志的任何特定问题。在此期间,我可以看到有希望的消息,例如:

Found index url https://pkgs.dev.azure.com/company/company_Software/_packaging/PyPI/pypi/simple/
Getting credentials from keyring for https://pkgs.dev.azure.com/company/company_Software/_packaging/PyPI/pypi/simple/

还有一些有问题的消息吗?:

Status code 302 not in (200, 203, 300, 301)
Skipping link: not a file: ...
Given no hashes to check 0 links for project 'as-api': discarding no candidates

复制细节

virtualenv .venv
.\.venv\Scripts\activate
python -m pip install -U pip
pip install keyring artifacts-keyring
pip install as-api

link用于生成发布软件包的管道以及建议的软件包安装方式。现在,我的方法是将选项1和选项2混合使用。请注意,使用php.ini文件设置--index-urlartifacts-keyring软件包(使用--pre进行安装不会产生任何影响)版本之间的差异),因此它实际上没有任何区别。但是,我分别尝试了这两个选项,它不会产生浏览器,因此它给出的结果相同。

系统详细信息:

  • 操作系统:Windows 10
  • Python 2.7.17
pip list
Package           Version
----------------- ----------
artifacts-keyring 0.2.8rc0
certifi           2019.11.28
chardet           3.0.4
configparser      4.0.2
entrypoints       0.3
idna              2.8
keyring           18.0.1
pip               19.3.1
pywin32-ctypes    0.2.0
requests          2.22.0
setuptools        42.0.2
urllib3           1.25.7
wheel             0.33.6

文件夹结构:

test
  |-- test.py
  |-- .venv
         |-- pip.ini
         |-- ... other virtualenv folders and files

pip.ini:

[global]
extra-index-url = https://pkgs.dev.azure.com/company/company_Software/_packaging/PyPI/pypi/simple/

进一步分析

  • 使用干净的笔记本电脑可以实际使用上述复制细节。公司中的其他计算机也有相同的问题,因此我们的某些设置与身份验证冲突。

  • 如果我们使用管道(请参见此link)来安装as-api软件包,则它可以工作,因此我怀疑这是身份验证问题,但是任何文档中都没有提及。

  • 使用https://username:password@ ...不会给出任何身份验证错误,即使用户名和密码错误也是如此。

  • 使用正确的用户名,但密码中包含符号会触发交互模式,以输入用户名和密码。但是,这会导致以下错误:WARNING: 401 Error, Credentials not correct for https://pkgs.dev.azure.com/company/company_Software/_packaging/PyPI/pypi/simple/as-api/请注意,我是Artifacts feed的所有者,并且该团队已被添加为“权限”标签中的所有者。

3 个答案:

答案 0 :(得分:2)

我的问题是我没有安装人工制品密钥。之后,我可以看到VS Code对提要进行身份验证并安装了软件包。

我还需要使用以下命令来升级pip(需要高于19.2):

python -m pip install --upgrade pip

答案 1 :(得分:0)

  

解决方法:

好像您正在使用option2中的the document来进行安装。我碰巧看到一个similar issue,它指示此错误消息可能与pip.ini(windows)或pip.conf(linux / mac)有关,所以我认为您可以尝试另一种方法避免这些配置出现问题。

您可以先运行pip install artifacts-keyring --pre,然后再运行

pip install packageName --index-url https://pkgs.dev.azure.com/xxx/xxx/_packaging/xxx/pypi/simple/ -vvv --no-deps

运行命令pip install artifacts-keyring --pre时,您将遇到类似这样的情况:

enter image description here

通过登录后,如果Feed中确实存在该软件包,您将获得所需的软件包。

答案 2 :(得分:0)

修复

执行以下操作之一:

  • 删除VSS_NUGET_EXTERNAL_FEED_ENDPOINTS环境变量(不是很有用,不建议使用)。

  • endpoint环境变量添加一个额外的VSS_NUGET_EXTERNAL_FEED_ENDPOINTS。例如,

{"endpointCredentials": [{"endpoint":"https://pkgs.dev.azure.com/company/_packaging/NuGetFeed/nuget/v3/index.json", ...},{"endpoint":"https://pkgs.dev.azure.com/company/company_Software/_packaging/PyPI/pypi/simple/", ...}]}

我们有一个脚本来设置这些端点,因此这真是一个简单的解决方法。

原因

事实证明,如果您使用artifacts-credprovider来设置另一个提要(在我们的示例中是具有另一个端点的NuGet提要),则VSS_NUGET_EXTERNAL_FEED_ENDPOINTS环境变量将仅在键{内存储该提要URL。 {1}}。即使endpoint不存在,artifacts-keyring仍将读取该环境变量,这会导致身份验证问题。 endpoint日志不会告诉您有关身份验证的任何信息,也不会尝试使用其他方法进行身份验证。