2012-12-05 11 views
12

プロキシサーバーを使用する企業ネットワークでez_setup.pyを使用してPythonのeasy_installをインストールする方法はありますか?現在、私は接続タイムアウトを受信します。たとえばプロキシサーバーの背後からez_setup.pyを使用してPythonのeasy_installをインストールする

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

:どうやら、あなたは、単に環境変数を設定することができます

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> 

答えて

4

をまた、あなたのコード内で設定することができます。

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

はい、私はez_setup.pyを変更できましたが、そのスクリプトはPEAKによって提供されていますので、 。提案してくれてありがとう、それは私が書いている他のスクリプトに役立つでしょう。 – jsears

+0

環境変数を設定していなかったのですが、これは私にとってはWindows上で働いていました。私は上記の行をez_setupスクリプトの冒頭に追加し、https(httpではなくhttpsで辞書内の別のエントリ)にも同じプロキシを含めました。 –

15

Windows 7では、wi PowerShellでは、上記のプロキシ設定は無視され、ツールは機能しません。しかし、私はその解決策を見つけました。

私は、WebClientクラスを経由してダウンロードするために使用スクリプトレット内

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

を追加することにより、ルーチンdownload_file_powershellを変更しました。あなたはすでにあなただけPowerShellを使用しないようにez_setup.pyを伝えることができHTTP_PROXY/HTTPS_PROXY環境変数が設定されている場合は

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 PowerShellで私をサポートしています!ありがとう。 – eckes

+0

Setuptools 3.6はこの手法を統合しています。 Powershellのすべてのバージョンで、またプロキシの資格情報が不要な場合でも、この手法が有効であることを確認できますか? –

+0

まあ、PowerShellはまれにしか使用しないので、私はそれを確認できません、ごめんなさい。 – valir

6

:ここでは今、完全なdownload_file_powershell関数です。 PowerShellはHTTP_PROXY/HTTPS_PROXY環境変数を使用しません。この応答の最初のセクションに従ってください。

環境変数の設定方法がわからない場合は、セクション2+を参照してください。

PowerShellのを使用してから

停止ez_setup.pyはez_install.pyに移動し、次のセクションを見つける:

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 

をして

def has_powershell(): 
    return False 

ez_installように変更します。 pyはあなたの環境HTTP_PROXY/HTTPS_PROXYを使用します。これは、コマンドラインまたはコントロールパネルから設定できます。

一時的なコマンドライン:

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

注:あなたがこれを行う場合、あなたはこれらのコマンドを実行したのと同じコマンド・ウィンドウで「Pythonのez_setup.py」を実行する必要があります。

常設コマンドライン(ユーザーのみ):

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

常設コマンドライン(すべてのユーザー別名マシン):

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

コントロールパネルから常設:

  1. スタート] - > [コントロールパネル] - > [ユーザー]をクリックし、「私の環境変数を変更する」、左側のパネルで
  2. アカウント
  3. クリックして「新..」「ユーザー変数」または「システム変数」で(あなたが望むものに依存します) HTTP_PROXYと変数値:
  4. は、変数名を設定します。http:/proxy.example.com
  5. をクリックし、「新..」「ユーザー変数」または「システム環境変数」で
  6. セット(あなたが望むものに依存します)変数名:HTTPS_PROXYおよび変数値:https:/proxy.example.com
  7. 「OK」をクリックしてください
0

私はちょうど同じ問題に遭遇しました。これが私が見つけた解決策です。私は理想的ではないと認めますが、これはWindows上でこの問題を発見した唯一の方法です。

  1. ダウンロードしてください。 ez_setup.py。
  2. 編集したファイルは、最大のZIPパッケージをダウンロードすることを期待どこを表示するには、次の行:あなたは私の場合には、スクリプトを実行すると、これは以下の出力を提供

    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) 
    

    saveto

印刷: "C:\ Python27> python.exe ez_setup.py"

出力:

C:\ Python27 \のsetuptoolsの-1.4.2.tar.gz ダウンロード中https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz "2"引数を指定して "DownloadFile"を呼び出す例外: "リモートサーバーからエラーが返されました:(407)プロキシ認証が必要です。ラインで :1つの文字:47 +(新しいオブジェクト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. httpsを上記のリンクからパックをダウンロードし、それは私の場合には期待していた場所にそれを置く "C:\ Python27 \"

このファイルを場所に配置すると、t彼の論理的なステートメント:

魔法のように、パッケージがインストールされます。

関連する問題