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
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.
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/