web-dev-qa-db-fra.com

installation pip à partir d'Azure DevOps Python Le flux d'artefacts ne fonctionne pas

Lorsque j'essaie d'installer un package à partir de notre flux Azure DevOps Artifacts, j'obtiens l'erreur:

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

En utilisant pip install -vvv produit potentiellement des informations confidentielles, je ne peux pas fournir le journal complet ici. N'hésitez pas à poser des questions spécifiques sur le journal. En attendant, je peux voir des messages prometteurs comme:

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/

Et quelques messages problématiques?:

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

Détails de reproduction

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

Ce lien a été utilisé pour produire un pipeline pour publier le package et la manière suggérée d'installer le package. Mon approche est maintenant un mélange de l'option 1 et de l'option 2. Notez l'utilisation d'un fichier php.ini pour définir --index-url et le artifacts-keyring package (installation avec --pre ne fait aucune différence dans la version), donc cela ne fait vraiment aucune différence. Cependant, j'ai essayé les deux options séparément, il ne fait pas apparaître de navigateur, il donne donc le même résultat.

Détails du système:

  • Système d'exploitation: 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

Structure des dossiers:

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/

Analyse approfondie

  • L'utilisation d'un ordinateur portable propre fonctionne en fait avec les détails de reproduction ci-dessus. D'autres ordinateurs de l'entreprise ont également le même problème, donc une partie de notre configuration est en conflit avec l'authentification.

  • Si nous utilisons un pipeline (voir ceci lien ) pour installer le as-api package, cela fonctionne, donc je soupçonne que c'est un problème d'authentification, mais il n'est mentionné dans aucune documentation.

  • L'utilisation de https: // nom d'utilisateur: mot de passe @ ... ne donne aucune erreur d'authentification, même avec un nom d'utilisateur et un mot de passe incorrects.

  • L'utilisation du nom d'utilisateur correct mais des symboles dans le mot de passe déclenchent le mode interactif pour entrer le nom d'utilisateur et le mot de passe. Cependant, cela donne cette erreur: WARNING: 401 Error, Credentials not correct for https://pkgs.dev.Azure.com/company/company_Software/_packaging/PyPI/pypi/simple/as-api/ Notez que je suis le propriétaire du flux d'artefacts et que l'équipe a été ajoutée en tant que propriétaire dans l'onglet d'autorisation.

3
Nelson Yeung

Le correctif

Effectuez l'une des actions suivantes:

  • Retirer le VSS_NUGET_EXTERNAL_FEED_ENDPOINTS variable d'environnement (pas très utile, non recommandé).

  • Ajoutez un endpoint supplémentaire au VSS_NUGET_EXTERNAL_FEED_ENDPOINTS variable d'environnement. Par exemple.,

{"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/", ...}]}

Nous avons un script qui configure ces points de terminaison, donc cela s'avère être une solution simple.

La cause

Il s'avère que si vous avez utilisé artifacts-credprovider pour configurer un autre flux, dans notre cas, un flux NuGet avec un autre point de terminaison, le VSS_NUGET_EXTERNAL_FEED_ENDPOINTS La variable d'environnement stocke uniquement cette URL de flux dans la clé endpoint. artifacts-keyring lira toujours cette variable d'environnement même si le endpoint n'existe pas, ce qui provoque un problème d'authentification. Le -vvv log ne vous dit rien sur l'authentification et il n'essaiera pas de s'authentifier en utilisant une autre méthode.

0
Nelson Yeung

Comme solution de contournement:

On dirait que vous utilisez option2 de le document pour faire l'installation. Il se trouve que j'en vois un problème similaire qui indique que ce message d'erreur pourrait avoir quelque chose à voir avec pip.ini (windows) ou pip.conf (linux/mac), donc je pense que vous pouvez essayer une autre approche pour éviter quelque chose de mal avec ces configurations.

Tu peux courir pip install artifacts-keyring --pre puis exécutez

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

Vous rencontreriez quelque chose comme ça lors de l'exécution de la commande pip install artifacts-keyring --pre:

enter image description here

Après la connexion, vous obtiendrez le package dont vous avez besoin s'il existe dans votre flux.

1
Lance Li-MSFT

Mon problème était que je n'avais pas installé d'artefacts-trousseau de clés. Après cela, j'ai pu voir VS Code s'authentifier auprès du flux et installer le package.

J'ai également eu besoin de mettre à jour pip (doit être supérieur à> 19,2) avec la commande suivante:

python -m pip install --upgrade pip
0
Viktor