2014-09-29 25 views
6

Tentativo di installare pip su una nuova installazione python. Sono bloccato con errori proxy. Sembra un bug in get-pip o urllib3 ??pip, autenticazione proxy e "Schema proxy non supportato"

La domanda è: devo risolvere il problema dell'impostazione di CNTLM as described here o c'è una scorciatoia?

get-pip.py documentation dice l'opzione --proxy="[user:[email protected]]proxy.server:port" per specificare il proxy e l'autenticazione pertinente. Ma sembra che Pip trasmetta tutto quanto lo è per urllib3 che interpreta "myusr" come lo schema dell'URL, a causa del ":" immagino (?).

C:\ProgFiles\Python27>get-pip.py --proxy myusr:[email protected]:80 
Downloading/unpacking pip 
Cleaning up... 
Exception: 
Traceback (most recent call last): 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\commands\install.py", line 278, in run 
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\req.py", line 1177, in prepare_files 
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\index.py", line 194, in find_requirement 
    page = self._get_page(main_index_url, req) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\index.py", line 568, in _get_page 
    session=self.session, 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\index.py", line 670, in get_page 
    resp = session.get(url, headers={"Accept": "text/html"}) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\sessions.py", line 468, in get 
    return self.request('GET', url, **kwargs) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\download.py", line 237, in request 
    return super(PipSession, self).request(method, url, *args, **kwargs) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\sessions.py", line 456, in request 
    resp = self.send(prep, **send_kwargs) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\sessions.py", line 559, in send 
    r = adapter.send(request, **kwargs) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\adapters.py", line 305, in send 
    conn = self.get_connection(request.url, proxies) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\adapters.py", line 215, in get_connection 
    block=self._pool_block) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\packages\urllib3\poolmanager.py", line 258, in proxy_fro 
m_url 
    return ProxyManager(proxy_url=url, **kw) 
    File "c:\users\sg0219~1\appdata\local\temp\tmpxwg_en\pip.zip\pip\_vendor\requests\packages\urllib3\poolmanager.py", line 214, in __init__ 
    'Not supported proxy scheme %s' % self.proxy.scheme 
AssertionError: Not supported proxy scheme myusr 

Storing debug log for failure in C:\Users\myusr\pip\pip.log 

C:\ProgFiles\Python27> 

quando ho eseguito il comando senza l'usrname e password funziona benissimo, ma procura respinge la richiesta dicendo che ha bisogno di autenticazione ("407 authenticationrequired").

C:\ProgFiles\Python27>get-pip.py --proxy 111.222.333.444:80 
Downloading/unpacking pip 
    Cannot fetch index base URL https://pypi.python.org/simple/ 
    Could not find any downloads that satisfy the requirement pip 
Cleaning up... 
No distributions at all found for pip 
Storing debug log for failure in C:\Users\sg0219898\pip\pip.log 

C:\ProgFiles\Python27>cat C:\Users\sg0219898\pip\pip.log 
------------------------------------------------------------ 
C:\ProgFiles\Python27\get-pip.py run on 09/29/14 16:23:26 
Downloading/unpacking pip 
    Getting page https://pypi.python.org/simple/pip/ 
    Could not fetch URL https://pypi.python.org/simple/pip/: connection error: ('Cannot connect to proxy.', error('Tunnel connection failed: 407 authenticationrequired',)) 
    Will skip URL https://pypi.python.org/simple/pip/ when looking for download links for pip 
    Getting page https://pypi.python.org/simple/ 
    Could not fetch URL https://pypi.python.org/simple/: connection error: ('Cannot connect to proxy.', error('Tunnel connection failed: 407 authenticationrequired',)) 
    Will skip URL https://pypi.python.org/simple/ when looking for download links for pip 
    Cannot fetch index base URL https://pypi.python.org/simple/ 
    URLs to search for versions for pip: 
    * https://pypi.python.org/simple/pip/ 
    Getting page https://pypi.python.org/simple/pip/ 
    Could not fetch URL https://pypi.python.org/simple/pip/: connection error: ('Cannot connect to proxy.', error('Tunnel connection failed: 407 authenticationrequired',)) 
    Will skip URL https://pypi.python.org/simple/pip/ when looking for download links for pip 
    Could not find any downloads that satisfy the requirement pip 
Cleaning up... 
    Removing temporary dir c:\users\sg0219~1\appdata\local\temp\pip_build_SG0219898... 
No distributions at all found for pip 
Exception information: 
Traceback (most recent call last): 
    File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\commands\install.py", line 278, in run 
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) 
    File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\req.py", line 1177, in prepare_files 
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade) 
    File "c:\users\sg0219~1\appdata\local\temp\tmp36ynxd\pip.zip\pip\index.py", line 277, in find_requirement 
    raise DistributionNotFound('No distributions at all found for %s' % req) 
DistributionNotFound: No distributions at all found for pip 

C:\ProgFiles\Python27> 

ho avuto un breve sguardo a urllib3\poolmanager.py e non sembra avere nulla a che fare con nome utente/password.

+1

Sembra che potrebbe essere correlato a https://github.com/kennethreitz/requests/issues/2247 – shazow

+0

Non lo è. Si prega di vedere la risposta sotto –

risposta

10

Questo si lamenta lo schema per l'URL (che urlparse è capire di essere myusr), per aggirare che si dovrebbe invece essere facendo:

get-pip.py --proxy http://myusr:[email protected]:80 
1

Questo perché lo script richiede le variabili di ambiente http_proxy o https_proxy contiene lo schema nell'URL. Impostare le variabili d'ambiente

export http_proxy="http://<hostname>:<port>" 
export https_proxy="https://<hostname>:<port>" 

prima di eseguire il "pitone get-pip.py"

+0

Questo non ha funzionato per me, ma ha funzionato con l'opzione '--proxy'. – dokaspar

+0

Questo ha funzionato per me. Stavo ottenendo lo stesso errore dell'OP e stavo usando variabili di ambiente proxy che non contenevano il 'http' /' https'. L'uso dell'opzione '--proxy' non ha funzionato per me, ma ciò potrebbe essere dovuto al fatto che le mie variabili di ambiente sono ancora esistenti. – JGC

0

Per il problema che hai citato, dipende da come l'autenticazione del server proxy è stato impostato. Ad esempio, la mia intranet utilizza Windows AD e probabilmente il server proxy utilizza l'autenticazione integrata di Windows. Così quando faccio pip install --proxy http://<server-ip>:<port> <module-name>, funziona bene. Si noti che non è necessario digitare il nome utente & password, probabilmente a causa dell'autenticazione integrata.

Quindi, è necessario trovare l'autenticazione utilizzata dal server proxy. È possibile utilizzare lo strumento Fiddler (o qualsiasi altro strumento di analisi di rete) per controllare le intestazioni dell'autenticazione WWW nella risposta 407, per verificare quale autenticazione mech il server supporta.

+0

Come in OP, il mio server si aspetta utente/password. Ad ogni modo il problema era quello che la risposta accettata indicava, rilevando di fare con auth in quanto tale. – Kashyap