Télécharger une librairie python via pip derrière un proxy.
Résolu
Kikumachi
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,
J'ai un sacré problème pour télécharger une librairie python, cela fait deux jours que je me casse la tête dessus et je viens de trouver la cause de mon problème, mais je ne suis pas plus avancé qu'avant !
Petit contexte : Je suis sous windows 10, avec une connexion proxy (dont je connais l'URL du serveur et le numéro de port), et j'ai téléchargé Python 3.7.2 récemment, toutefois j'ai besoin de certaines bibliothèques afin de pouvoir coder de façon correcte. Pour cela je voudrais utiliser la commande pip. J'ai donc installé pip avec succès sur mon ordinateur (j'ai bien dans Program Files/Python3.7.2/Scripts plusieurs dossiers "pip", "pip3" chacun d'environ 90 Ko), et je tape, pour télécharger par exemple la librairie "matplotlib" :
Où HTTPS_PROXY est une variable d'environnement définie comme suit :
J'obtenais alors l'erreur suivante :
Je suis donc allé voir le fichier de la dernière ligne d'erreur "url.py", et après avoir conduit quelques tests à base de "print", j'ai remarqué que l'erreur venait de mon "Username", qui possède le caractère "/" !
Or ce caractère est considéré dans le fichier qui analyse HTTPS_PROXY comme un séparateur dans le programme, afin de construire les chemins d'URL (par exemple vers le lien possédant la librairie), il est utilisé dans une fonction "split". Mon username possédant ce caractère, il se retrouve alors coupé en deux, avec "[Début d'username" stocké dans la variable "url" du programme, et "FinUsername:passwd@]proxy.server:proxyPort" stocké dans la variable "path" du programme, et le parsing ne peut plus avoir lieu ensuite car le programme doit extraire l'username et le Password ensemble depuis une seule variable et le fait à l'aide de crochets, mais ces crochets se retrouvent dans "path" et "url" (le programme unpackant "url" qui possède le crochet gauche, ne retrouve pas le crochet droit et considère alors qu'il n'y a qu'un seul élément.
Suite à cela, j'ai pensé changer mon nom d'utilisateur, mais je n'y suis pas autorisé, je voudrais donc savoir :
- s'il y a un autre moyen de télécharger la bibliothèque
- S'il y a un moyen de modifier le programme url.py afin que le "/" de mon nom d'utilisateur ne soit pas considéré comme délimitant un chemin d'URL.
Merci d'avance pour votre aide !
J'ai un sacré problème pour télécharger une librairie python, cela fait deux jours que je me casse la tête dessus et je viens de trouver la cause de mon problème, mais je ne suis pas plus avancé qu'avant !
Petit contexte : Je suis sous windows 10, avec une connexion proxy (dont je connais l'URL du serveur et le numéro de port), et j'ai téléchargé Python 3.7.2 récemment, toutefois j'ai besoin de certaines bibliothèques afin de pouvoir coder de façon correcte. Pour cela je voudrais utiliser la commande pip. J'ai donc installé pip avec succès sur mon ordinateur (j'ai bien dans Program Files/Python3.7.2/Scripts plusieurs dossiers "pip", "pip3" chacun d'environ 90 Ko), et je tape, pour télécharger par exemple la librairie "matplotlib" :
pip3 install matplotlib --proxy HTTPS_PROXY
Où HTTPS_PROXY est une variable d'environnement définie comme suit :
comme indiqué dans l'aide de la commande.
https://[Username:passwd@]proxy.server:proxyPort
J'obtenais alors l'erreur suivante :
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\cli\base_command.py", line 143, in main
status = self.run(options, args)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\commands\install.py", line 318, in run
resolver.resolve(requirement_set)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\resolve.py", line 102, in resolve
self._resolve_one(requirement_set, req)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\resolve.py", line 256, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\resolve.py", line 209, in _get_abstract_dist_for
self.require_hashes
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\operations\prepare.py", line 218, in prepare_linked_requirement
req.populate_link(finder, upgrade_allowed, require_hashes)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\req\req_install.py", line 164, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\index.py", line 572, in find_requirement
all_candidates = self.find_all_candidates(req.name)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\index.py", line 530, in find_all_candidates
for page in self._get_pages(url_locations, project_name):
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\index.py", line 675, in _get_pages
page = self._get_page(location)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\index.py", line 793, in _get_page
return _get_html_page(link, session=self.session)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\index.py", line 144, in _get_html_page
"Cache-Control": "max-age=0",
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_vendor\requests\sessions.py", line 525, in get
return self.request('GET', url, **kwargs)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_internal\download.py", line 396, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_vendor\requests\sessions.py", line 512, in request
resp = self.send(prep, **send_kwargs)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_vendor\requests\sessions.py", line 622, in send
r = adapter.send(request, **kwargs)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_vendor\cachecontrol\adapter.py", line 53, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_vendor\requests\adapters.py", line 410, in send
conn = self.get_connection(request.url, proxies)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_vendor\requests\adapters.py", line 304, in get_connection
proxy_url = parse_url(proxy)
File "c:\program files (x86)\python3.7.2\lib\site-packages\pip\_vendor\urllib3\util\url.py", line 196, in parse_url
host, url = url.split(']', 1)
ValueError: not enough values to unpack (expected 2, got 1)
Je suis donc allé voir le fichier de la dernière ligne d'erreur "url.py", et après avoir conduit quelques tests à base de "print", j'ai remarqué que l'erreur venait de mon "Username", qui possède le caractère "/" !
Or ce caractère est considéré dans le fichier qui analyse HTTPS_PROXY comme un séparateur dans le programme, afin de construire les chemins d'URL (par exemple vers le lien possédant la librairie), il est utilisé dans une fonction "split". Mon username possédant ce caractère, il se retrouve alors coupé en deux, avec "[Début d'username" stocké dans la variable "url" du programme, et "FinUsername:passwd@]proxy.server:proxyPort" stocké dans la variable "path" du programme, et le parsing ne peut plus avoir lieu ensuite car le programme doit extraire l'username et le Password ensemble depuis une seule variable et le fait à l'aide de crochets, mais ces crochets se retrouvent dans "path" et "url" (le programme unpackant "url" qui possède le crochet gauche, ne retrouve pas le crochet droit et considère alors qu'il n'y a qu'un seul élément.
Suite à cela, j'ai pensé changer mon nom d'utilisateur, mais je n'y suis pas autorisé, je voudrais donc savoir :
- s'il y a un autre moyen de télécharger la bibliothèque
- S'il y a un moyen de modifier le programme url.py afin que le "/" de mon nom d'utilisateur ne soit pas considéré comme délimitant un chemin d'URL.
Merci d'avance pour votre aide !
A voir également:
- Pip install proxy
- Install microsoft store - Guide
- Vidmate apk download install - Télécharger - TV & Vidéo
- Snaptube install - Télécharger - Conversion & Codecs
- Proxy google 8.8.8.8 port - Guide
- Play store install - Accueil - Applis & Sites
Merci pour votre conseil. J'ai essayé de remplacer le "/" par "%2F" et cela me donne une autre erreur :
Il semblerait qu'il ne trouve pas la librairie matplotlib, ou que j'aie oublié de préciser une option, mais je ne suis pas sûr de ce dont il s'agit.
d'après , le format de cette option est :
en fait, si tu définis HTTPS_PROXY (et HTTP_PROXY) en variables d'environnement, pip devrait respecter ce qui y figure, sans que tu aies à passer autre chose, essaye alors . L'option de ligne de commande ne serait utile que si tu n'as pas définit de variable d'environnement, ou si tu veux passer un autre proxy que celui définit au niveau du système par la variable d'environnement.
J'ai remarqué que pendant tout ce temps j'avais ouvert l'invite de commande en tant qu'utilisateur et non en tant qu'administrateur.
J'ai du coup ré-essayé ce que vous m'aviez dit et j'obtiens l'erreur suivante :
https://urllib3.readthedocs.io/en/latest/reference/#urllib3.connection.VerifiedHTTPSConnection
Il se peut que pip ne valide pas bien le certificat SSL du site lorsque la connexion passe par le proxy, dans ce cas, tu pourrais essayer d'ajouter à la ligne de commande (sauf si tu as customisé pip.conf pour pointer vers un autre repository).
Sinon, ajoute l'option à la ligne de commande pip install (-v pour verbose), on aura peut-être plus d'infos sur la nature du problème qui semble affecter la connexion HTTPS, et copie-colle la commande que tu tapes suivie de l'intégralité des messages qu'elle produit.
J'obtiens :
J'ai également essayé de taper la commande :
et j'obtiens :