【问题标题】:pip install from Azure DevOps Python Artifacts feed not working从 Azure DevOps Python Artifacts 源安装 pip 不起作用
【发布时间】:2019-12-23 17:17:39
【问题描述】:

当我尝试从我们的 Azure DevOps Artifacts 源安装包时,我收到错误消息:

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/

进一步分析

  • 使用干净的笔记本电脑实际上可以处理上述复制细节。公司其他电脑也有同样的问题,所以我们的一些设置与认证冲突。

  • 1234563
  • 使用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 提要的所有者,并且团队已添加为权限选项卡中的所有者。

【问题讨论】:

  • 看起来像 pip: github.com/pypa/pip/issues/6179 中的错误。仍然开放。
  • @phd 有趣的发现。我想知道这是否是同样的问题,因为如果我在 Azure 上设置一个安装相同 as-api 包的管道,它似乎可以工作(请参阅我帖子中的最后一点)。
  • 也许 Azure 在第二种情况下不会发回重定向?
  • @LanceLi-MSFT 这实际上与我从同一页面获得的方法相同。我只是在页面上再次尝试了完全相同的命令,它给出了相同的结果。添加--pre 对版本没有任何影响,使用--index-url 与我的相同,只是pip 不会搜索pypi.org/simple 索引。很抱歉造成混淆,我应该添加更多我在问题中尝试过的东西。我现在会更新。
  • 您是否像我回答中的图片一样通过了登录检查?我尝试了这两个选项,发现在某些情况下登录检查不会发生,因此我们无法进行身份验证,它只是抛出类似Could not find a version... 似乎你使用@987654344 @ 进行安装,对于 option1,只有带有 devops feed --index-url https://pkgs.dev.azure.com/xxx/xxx/_packaging/xxx/pypi/simple/ 的命令就足够了。另外,如果我们添加参数--no-deps 有什么不同吗,任何更新都随时让我知道:)

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


【解决方案1】:

作为一种解决方法:

看起来您正在使用来自the documentoption2 进行安装。我碰巧看到一个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时会遇到这样的情况:

登录通过后,如果您的提要中确实存在所需的包,您将获得它。

【讨论】:

    【解决方案2】:

    我的问题是我没有安装 artifacts-keyring。之后,我可以看到 VS Code 对提要进行身份验证并安装包。

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

    python -m pip install --upgrade pip
    

    【讨论】:

      【解决方案3】:

      修复

      执行以下操作之一:

      • 删除VSS_NUGET_EXTERNAL_FEED_ENDPOINTS 环境变量(不是很有用,不推荐)。

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

      {"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 存储在键 endpoint 中。即使endpoint 不存在,artifacts-keyring 仍会读取该环境变量,这会导致身份验证问题。 -vvv 日志不会告诉您有关身份验证的任何信息,也不会尝试使用其他方法进行身份验证。

      【讨论】:

      • 您好 Nelson,感谢您的分享,请将您的回复标记为 self-answer,这将有助于其他社区成员更轻松地搜索此有用信息,这只是一个提醒 :)
      【解决方案4】:

      假设您的 Azure DevOps 工件是私有的,并且您有一个 PAT,那么可以通过以下两种方式从工件安装包

      1. 如果您可以访问终端(仅在开发环境中首选)
      pip install https://<your-feed-name>:<your-PAT-key>@pkgs.dev.azure.com/<your-organization-name>/<your-project-name>/_packaging/<your-feed-name>/pypi/simple/ Your-Package-Name==x.x.x
      

      注意:所有名称(例如:feed、project)都必须遵循 HTTPS URL 约定。了解 URL 的简单(实际上正确)方法是转到 Artifacts --> 选择您的工件提要 --> 连接到提要 --> PIP --> 在这里您将获得正确的 URL。另外,在 URL 中使用一些提要名称

      1. 使用requirements.txt(这将非常适合用于产品或 CI/CD 管道)并自动化流程:

      请注意,它需要一些字符串/URL 操作。以下列方式在您的requirements.txt 中添加相应的行/URL:

      • URL 将与早期终端方法中使用的早期 URL 大体相似
      • simple之后的URL中一切都要改,修改后的URL-
      https://<your-feed-name>:<your-PAT-key>@pkgs.dev.azure.com/<your-organization-name>/<your-project-name>/_packaging/<your-feed-name>/pypi/download/<yourpackagename>/<package version>/Your-Package-Name.whl 
      #assuming your package is a .whl file
      
      • 所以simple改为download;那么无论你的包名是什么,是否包含'-'或'_'或CAPS,所有内容都将被删除并转换为小写。
      • 接下来是您要安装的软件包的版本号,最后是 wheel 或 .whl 文件的名称。

      【讨论】:

        【解决方案5】:

        作为@user:10097045 答案的更新

        您必须在选项 1 中带有路径的 URL 前面添加 --extra-index-url= 否则 pip 将无法找到目录

        否则答案非常有帮助,您只需得到一个没有该定义的 404

        【讨论】:

        猜你喜欢
        • 2019-03-02
        • 2020-03-16
        • 1970-01-01
        • 2014-08-29
        • 2020-12-11
        • 2021-04-28
        相关资源
        最近更新 更多