2012-12-05 7 views
12

C'è un modo per installare l'installazione di Python con ez_setup.py su una rete aziendale che utilizza un server proxy? Attualmente, ricevo un timeout di connessione:Installazione di easy_install di Python utilizzando ez_setup.py da un server proxy

Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg 
Traceback (most recent call last): 
    File "C:\jsears\python\ez_setup.py", line 278, in <module> 
    main(sys.argv[1:]) 
    File "C:\jsears\python\ez_setup.py", line 210, in main 
    egg = download_setuptools(version, delay=0) 
    File "C:\jsears\python\ez_setup.py", line 158, in download_setuptools 
    src = urllib2.urlopen(url) 
    File "C:\jsears\Python27\lib\urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "C:\jsears\Python27\lib\urllib2.py", line 400, in open 
    response = self._open(req, data) 
    File "C:\jsears\Python27\lib\urllib2.py", line 418, in _open 
    '_open', req) 
    File "C:\jsears\Python27\lib\urllib2.py", line 378, in _call_chain 
    result = func(*args) 
    File "C:\jsears\Python27\lib\urllib2.py", line 1207, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "C:\jsears\Python27\lib\urllib2.py", line 1177, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond> 

risposta

6

A quanto pare, si può semplicemente impostare una variabile di ambiente:

export http_proxy=http://<user>:<password>@<proxy_host_name>:<port>

Ad esempio:

export http_proxy=http://admin:[email protected]:80

+4

su Windows le due variabili d'ambiente non funzionano – yorua007

+0

il mio caso ha funzionato abbastanza bene – eusoubrasileiro

4

è anche possibile impostare nel codice:

import urllib2 

proxy = urllib2.ProxyHandler({'http':'http://username:[email protected]_host:port'}) 
auth = urllib2.HTTPBasicAuthHandler() 
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler) 
urllib2.install_opener(opener) 
+1

Sì, potrei modificare ez_setup.py, ma quello script è fornito da PEAK, quindi e non volevo incidere nel loro script . Grazie per la proposta, in quanto ciò aiuterà con altri script che scrivo. – jsears

+0

Questo ha funzionato per me su Windows, mentre l'impostazione delle variabili di ambiente no. Ho aggiunto le righe precedenti all'inizio dello script ez_setup e incluso lo stesso proxy per https (solo un'altra voce nel dizionario con https anziché http). –

15

Su Windows 7, wi th PowerShell, le impostazioni del proxy sopra sono ignorate e lo strumento non funzionerà. Ma ho trovato la soluzione.

ho modificato il download_file_powershell di routine con l'aggiunta di

[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; 

all'interno della scriptlet utilizzato per scaricare tramite la classe WebClient. Ecco la funzione download_file_powershell completa ora:

def download_file_powershell(url, target): 
""" 
Download the file at url to target using Powershell (which will validate 
trust). Raise an exception if the command cannot complete. 
""" 
target = os.path.abspath(target) 
cmd = [ 
    'powershell', 
    '-Command', 
    "[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; (new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" % vars(), 
] 
subprocess.check_call(cmd) 
+1

+1 per il supporto con PowerShell! Grazie. – eckes

+0

Setuptools 3.6 integra questa tecnica. Puoi confermare che la tecnica funzioni su tutte le versioni di Powershell e anche quando le credenziali del proxy non sono necessarie? –

+0

Bene, io uso PowerShell abbastanza raramente, quindi non posso confermarlo, mi dispiace. – valir

6

Se si dispone già di un http_proxy/https_proxy set variabile d'ambiente si può solo dire ez_setup.py di non utilizzare PowerShell. PowerShell non utilizza le variabili di ambiente HTTP_PROXY/HTTPS_PROXY. Segui la prima sezione di questa risposta.

Per le persone che potrebbero non sapere come impostare le variabili di ambiente, vedere le sezioni 2+.

arresto ez_setup.py usare PowerShell

Vai nella ez_install.py e trovare la sezione seguente:

def has_powershell(): 
    if platform.system() != 'Windows': 
     return False 
    cmd = ['powershell', '-Command', 'echo test'] 
    devnull = open(os.path.devnull, 'wb') 
    try: 
     try: 
      subprocess.check_call(cmd, stdout=devnull, stderr=devnull) 
     except: 
      return False 
    finally: 
     devnull.close() 
    return True 

e modificarlo per essere

def has_powershell(): 
    return False 

ez_install. py utilizzerà l'ambiente HTTP_PROXY/HTTPS_PROXY che può essere impostato dalla riga di comando o tramite il pannello di controllo.

temporaneo riga di comando:

set HTTP_PROXY=http://proxy.example.com 
set HTTPS_PROXY=https://proxy.example.com 

Nota: se si esegue questa operazione è necessario eseguire 'python ez_setup.py' nella stessa finestra di comando è stato eseguito questi comandi in.

permanente riga di comando (User Only):

setx HTTP_PROXY "http://proxy.example.com" 
setx HTTPS_PROXY "https://proxy.example.com" 

permanente riga di comando (macchina aka Tutti gli utenti):

setx HTTP_PROXY "http://proxy.example.com" /M 
setx HTTPS_PROXY "https://proxy.example.com" /M 

permanente tramite pannello di controllo:

  1. Start -> Pannello di controllo -> Account utente
  2. Sul pannello di sinistra, fare clic su "Modifica le mie variabili d'ambiente"
  3. Fare clic su "Nuovo .." in "Variabili utente" o "Variabili di sistema" (a seconda di ciò che si desidera)
  4. impostare il nome variabile: HTTP_PROXY e il valore variabile: http: /proxy.example.com
  5. Fare clic su "Nuovo .." in "variabili utente" o "variabili di sistema" (a seconda di ciò che si vuole)
  6. Set Nome della variabile: HTTPS_PROXY e Valore della variabile: https: /proxy.example.com
  7. Fare clic su "Ok"
0

Ho appena incontrato lo stesso problema e questa è la soluzione che ho trovato. Devo ammettere che non è l'ideale, ma è solo il modo in cui ho trovato questo problema su Windows.

  1. Download. ez_setup.py.
  2. modificare la riga seguente per mostrare dove il file si aspettano di scaricare il pacchetto zippato fino a:

stampa Salvaper

def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, 
         to_dir=os.curdir, delay=15, 
         downloader_factory=get_best_downloader): 
# making sure we use the absolute path 
to_dir = os.path.abspath(to_dir) 
tgz_name = "setuptools-%s.tar.gz" % version 
url = download_base + tgz_name 
saveto = os.path.join(to_dir, tgz_name) 
print saveto 
if not os.path.exists(saveto): # Avoid repeated downloads 
    log.warn("Downloading %s", url) 
    downloader = downloader_factory() 
    downloader(url, saveto) 
return os.path.realpath(saveto) 

Questo fornisce il seguente output quando si esegue lo script nel mio caso : "C: \ Python27> python.exe ez_setup.py"

uscita:

C: \ Python27 \ setuptools-1.4.2.tar.gz Download https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz Eccezione chiamata "DownloadFile" con argomento "2": "Il server remoto ha restituito un errore: (407) Autenticazione proxy richiesta." At line: 1 char: 47 + (nuovo-oggetto System.Net.WebClient) .DownloadFile < < < < ('https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz', 'C: \ Python27 \ setuptools-1.4.2.tar.gz') + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException

  1. Scarica il pacchetto dai https link qui sopra e metterlo nella posizione che si aspetta nel mio caso "C: \ Python27 \"

Questo file inserito nella posizione attiva t la sua dichiarazione logica:

if not os.path.exists(saveto): # Avoid repeated downloads 
    log.warn("Downloading %s", url) 
    downloader = downloader_factory() 
    downloader(url, saveto) 
return os.path.realpath(saveto) 

Come per magia, il pacchetto verrà installato.

Problemi correlati