Pip: Utiliser pip install via un référentiel privé protégé par .htaccess ?

Créé le 15 mars 2011  ·  21Commentaires  ·  Source: pypa/pip

Salut,

Je voudrais protéger un référentiel Python Index privé avec le fichier ".htaccess".

Lorsque j'utilise pip pour installer un package à partir de ce référentiel, j'ai cette erreur :

Getting page http://pypi.is-webdesign.com/simple/
Could not fetch URL http://pypi.is-webdesign.com/simple/: HTTP Error 401: Unauthorized

Comment puis-je utiliser les paramètres de connexion/mot de passe avec pip ?

Pip ne supporte pas cette fonctionnalité ? Sinon c'est prévu ?

Salutations,
Stéphane


auto-locked enhancement

Commentaire le plus utile

pip prend en charge l'authentification de base via son URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67

Utilisez simplement une URL comme http://username:password@server/whatever/


Original Comment By: Jannis Leidel

Tous les 21 commentaires

pip prend en charge l'authentification de base via son URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67

Utilisez simplement une URL comme http://username:password@server/whatever/


Original Comment By: Jannis Leidel

Avec la version 0.8.1 pip je peux faire :

pip install -f http://username:[email protected]/simple/ my_package

Je ne sais pas si cette fonctionnalité est documentée ou non.

Je regarderai ça dès.

Cordialement, Stéphane


Original Comment By: Stéphane Klein

Jannis, j'ai essayé comme vous l'avez dit mais cela n'a pas fonctionné pour moi lors de l'utilisation de HTTPS.

Quelqu'un peut-il me le confirmer ? Est-ce un bug connu?

Merci! :-)


Original Comment By: Guilherme Gondim

Je peux confirmer que cela ne fonctionne pas avec https. J'obtiens l'erreur suivante :

Traceback (most recent call last):

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.6.3-py2.6.egg/pip/basecommand.py", ligne 115, dans main

    self.run(options, args)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.6.3-py2.6.egg/pip/commands/install.py", ligne 155, en cours d'exécution

    requirement_set.install_files(finder, force_root_egg_info=self.bundle,

bundle=self.bundle)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.6.3-py2.6.egg/pip/req.py", ligne 823, dans install_files

    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.6.3-py2.6.egg/pip/index.py", ligne 55, dans find_requirement

    page = self._get_page(main_index_url, req)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.6.3-py2.6.egg/pip/index.py", ligne 282, dans _get_page

    return HTMLPage.get_page(link, req, cache=self.cache)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.6.3-py2.6.egg/pip/index.py", ligne 363, dans get_page

    resp = urllib2.urlopen(url)

  File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen

    return _opener.open(url, data, timeout)

  File "/usr/lib/python2.6/urllib2.py", line 391, in open

    response = self._open(req, data)

  File "/usr/lib/python2.6/urllib2.py", line 409, in _open

    '_open', req)

  File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain

    result = func(*args)

  File "/usr/lib/python2.6/urllib2.py", line 1169, in https_open

    return self.do_open(httplib.HTTPSConnection, req)

  File "/usr/lib/python2.6/urllib2.py", line 1107, in do_open

    h = http_class(host, timeout=req.timeout) # will parse host:port

  File "/usr/lib/python2.6/httplib.py", line 1101, in __init__

    HTTPConnection.__init__(self, host, port, strict, timeout)

  File "/usr/lib/python2.6/httplib.py", line 657, in __init__

    self._set_hostport(host, port)

  File "/usr/lib/python2.6/httplib.py", line 682, in _set_hostport

    raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])

InvalidURL: nonnumeric port: '[email protected]'

Original Comment By: Ian Lewis

Les nouvelles versions de pip semblent générer l'erreur suivante lors de l'utilisation d'un nom d'utilisateur
et mot de passe:

Traceback (most recent call last):

  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner

    self.run()

  File "/usr/lib/python2.6/threading.py", line 484, in run

    self.__target(*self.__args, **self.__kwargs)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.8.1-py2.6.egg/pip/index.py", ligne 241, dans _get_queued_page

    page = self._get_page(location, req)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.8.1-py2.6.egg/pip/index.py", ligne 326, dans _get_page

    return HTMLPage.get_page(link, req, cache=self.cache)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.8.1-py2.6.egg/pip/index.py", ligne 424, dans get_page

    content_type = cls._get_content_type(url)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.8.1-py2.6.egg/pip/index.py", ligne 486, dans _get_content_type

    resp = urlopen(req)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.8.1-py2.6.egg/pip/download.py", ligne 88, en appel

    response = self.get_response(url)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages/pip-0.8.1-py2.6.egg/pip/download.py", ligne 107, dans get_response

    scheme, netloc, path, query, frag = urlparse.urlsplit(url)

  File "/usr/lib/python2.6/urlparse.py", line 147, in urlsplit

    i = url.find(':')

  File "/usr/lib/python2.6/urllib2.py", line 218, in __getattr__

    raise AttributeError, attr

AttributeError: find

Le problème se produit lorsque pip essaie de faire une requête principale sur le fichier d'archive mais
atteint un 401. https://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -86

L'url passée à self.get_response() est un objet urllib2.Request mais
get_response() essaie d'appeler urlsplit() dessus. qui renvoie l'erreur ci-dessus.
Le fichier semble se télécharger cependant.


Original Comment By: Ian Lewis

On dirait que cela est corrigé, j'ai un index privé sous HTTPS + authentification de base et cela fonctionne simplement avec --index-url https://user:[email protected] .

Quelqu'un peut-il confirmer cela et clore le problème ?

Je viens d'ajouter une pull request (https://github.com/pypa/pip/pull/786) liée à ce sujet.

@brutasse je confirme. Fermer ça ?

1.5.6 a toujours le problème.

Pouvons-nous confirmer exactement le problème dont on parle maintenant ?

Désolé. Travaille pour moi. Mon erreur :-D
Le 18 juillet 2014 à 05h20, "Matt Iversen" [email protected] a écrit :

Pouvons-nous confirmer exactement le problème dont on parle maintenant ?

-
Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/pypa/pip/issues/51#issuecomment -49406680.

Encore faut-il mettre le nom d'utilisateur et le mot de passe dans l'URL ?

Est-il supporté dans pip==6.0.8 ?

J'utilise l'index PyPI privé et j'exécute l'installation comme ceci :
pip install <my_package> --cert=<required_for_some_reason> --extra-index-url https://username:[email protected]/simple/ --allow-all-external

et puis cela fonctionne, mais demande le nom d'utilisateur et le mot de passe de manière interactive. Ce n'est pas un cas où ce script s'est exécuté en dehors du shell avec CLI.

Veuillez confirmer s'il est lié au problème discuté ici ou suggérer si je dois créer un autre problème, ou veuillez indiquer la solution.

@vladignatyev Je viens de rencontrer le même problème que vous avez mentionné, celui de demander l'utilisateur / le mot de passe de manière interactive. J'ai réduit le problème à avoir un symbole dans le mot de passe qui nécessite un codage d'URL. Si je n'encode pas l'URL du mot de passe, l'URL ne peut pas être analysée. Si je code le mot de passe par URL, je pense que pip ne le décode pas par URL avant de tenter de s'authentifier.

J'ai aussi ce problème avec pip 7.1.2. Il y a un symbole dans le mot de passe qui nécessite un codage d'URL, pip ne parvient pas à s'authentifier (obtient une réponse 401) et demande le nom d'utilisateur/mot de passe de manière interactive. Cela fonctionne alors très bien si j'entre l'utilisateur/passe de manière interactive. Comme @bcbrown, je soupçonne que ce n'est pas le décodage de l'URL du mot de passe.

VEUILLEZ CORRIGER CE PIP 8.1.2 dès que possible

Je viens de rencontrer cela en utilisant 9.0.3 .... Est-ce toujours un problème sérieux ?

L'analyse du nom d'utilisateur/mot de passe à partir de l'URL ne fonctionne que lorsque le port est spécifié.
(Au moins sur Debian 9, Python 2.7.13, pip 18.1, mais j'ai également eu ce problème sur d'autres systèmes)

Cette requête pour le nom d'utilisateur/mot de passe : pip install -f https://user:[email protected]/pkgs requests
Cela fonctionne : pip install -f https://user:[email protected]:443/pkgs requests

Cela fonctionne avec le pip 18.1 mais cassé dans la dernière version (19.1), confirmé après être revenu à 18.1, cela fonctionne.

L'analyse du nom d'utilisateur/mot de passe à partir de l'URL ne fonctionne que lorsque le port est spécifié.
(Au moins sur Debian 9, Python 2.7.13, pip 18.1, mais j'ai également eu ce problème sur d'autres systèmes)

Cette requête pour le nom d'utilisateur/mot de passe : pip install -f https://user:[email protected]/pkgs requests
Cela fonctionne : pip install -f https://user:[email protected]:443/pkgs requests

@olt J'ai eu le même problème avec pip 19.1.1 et j'ai réussi à le faire fonctionner en mettant le port comme vous l'avez suggéré. Solution de contournement assez obscure, j'aimerais pouvoir voter davantage votre réponse.

Cette page vous a été utile?
0 / 5 - 0 notes