web-dev-qa-db-fra.com

Informations d'identification dans pip.conf pour PyPI privé

J'ai un dépôt PyPI privé. Existe-t-il un moyen de stocker les informations d'identification dans pip.conf semblable à .pypirc?

Ce que je veux dire. Actuellement en .pypirc vous pouvez avoir une telle configuration:

[distutils]
index-servers = custom

[custom]
repository: https://pypi.example.com
username: johndoe
password: changeme

D'après ce que j'ai trouvé, vous pouvez mettre pip.conf:

[global]
index = https://username:[email protected]/pypi
index-url = https://username:[email protected]/simple
cert = /etc/ssl/certs/ca-certificates.crt

Mais ici, je vois deux problèmes:

  1. Pour chaque URL, vous devrez à chaque fois spécifier le même nom d'utilisateur et le même mot de passe.
  2. Le nom d'utilisateur et le mot de passe deviennent visibles dans les journaux, car ils font partie de l'URL.

Existe-t-il un moyen de stocker le nom d'utilisateur et le mot de passe en dehors de l'URL?

14
stolho

Vous pouvez stocker des informations d'identification pour Pip à utiliser dans ~/.netrc comme ça:

machine pypi.example.com
    login johndoe
    password changeme

Pip utilisera ces informations d'identification lors de l'accès à https://pypi.example.com mais ne les enregistrera pas. Vous devez spécifier le serveur d'index séparément (comme dans pip.conf comme dans la question).

Notez que ~/.netrc doit appartenir à l'utilisateur pip s'exécute en tant que. Il ne doit pas non plus être lisible par aucun autre utilisateur. Un fichier invalide est ignoré en silence. Vous pouvez vous assurer que les autorisations sont correctes comme ceci:

chown $USER ~/.netrc
chmod 0600 ~/.netrc

Cette vérification des autorisations ne s'applique pas avant Python 3.4, mais c'est une bonne idée dans tous les cas.

En interne, Pip utilise requêtes lors des requêtes HTTP. demandes utilise la bibliothèque standard netrc module pour lire le fichier, donc le jeu de caractères est limité à un sous-ensemble ASCII.

7
twm

Que diriez-vous de stocker le nom d'utilisateur/mot de passe en tant que variables d'environnement,

export username=username
export password=password

et en y faisant référence dans le pip.conf comme ceci:

[global]
index = https://$username:[email protected]/pypi
index-url = https://$username:[email protected]/simple
cert = /etc/ssl/certs/ca-certificates.crt

J'utilise les variables secrètes de Gitlab CI pour stocker les informations d'identification. Recherchez un équivalent dans votre outil CI.

1
Ketan Vatsalya