热门标签:
Q:

使用安装Python的easy_install ez_setup.py 从代理服务器后面

有没有办法使用安装Python的easy_install ez_setup.py 当在使用代理服务器的公司网络上时? 目前,我收到连接超时:

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>
原网址
A:

在Windows7上,使用PowerShell,上面的代理设置将被忽略,该工具将不起作用。 但我找到了解决方案。

我通过添加修改了例程download_file_powershell

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

用于通过WebClient类下载的scriptlet内部。 这里是现在完整的download_file_powershell函数:

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)

所有回答

共 4 条

author avatar

如果你已经有一个http_proxy/https_proxy环境变量集,你可以告诉ez_setup.py 不使用PowerShell。 PowerShell不使用HTTP_PROXY/HTTPS_PROXY环境变量。 请遵循此响应中的第一部分。

对于可能不知道如何设置环境变量的人,请参阅第2+节。

停止ez_setup.py 从使用PowerShell

进入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. 点击"新建。."在"用户变量"或"系统变量"(取决于你想要的)
  4. 设置变量名:HTTP_PROXY和变量值:http:/proxy.example.com
  5. 点击"新建。."在"用户变量"或"系统变量"(取决于你想要的)
  6. 设置变量名:HTTPS_PROXY和变量值:https:/proxy.example.com
  7. 点击"确定"
author avatar

显然,你可以简单地设置一个环境变量:

export http_proxy=http://:@:

例如:

出口http_proxy=http://admin:password@proxy.example.com:80

author avatar

您也可以在代码中设置:

import urllib2

proxy = urllib2.ProxyHandler({'http':'http://username:password@proxy_host:port'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)
author avatar

我刚刚遇到了同样的问题,这是我找到的解决方案。 我承认并不理想,但这是我在Windows上发现这个问题的唯一方法。

  1. 下载。 ez_setup.py...
  2. 编辑以下行以显示文件期望将压缩包下载到的位置:

打印saveto

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)

当您在我的情况下执行脚本时,这提供了以下输出:"C:\Python27>python。exe文件ez_setup.py"

输出:

C:\Python27\setuptools-1.4.2...焦油。gz 正在下载https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz 异常调用带有"2"参数的"DownloadFile":"远程服务器返回错误:(407)需要代理身份验证。" 在行:1char:47 +(new-object System.Net.WebClient).DownloadFile<<<<('https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz','C:\Python27\setuptools-1.4.2...焦油。gz') +CategoryInfo:NotSpecified:(:)[],MethodInvocationException +FullyQualifiedErrorId:DotNetMethodException

  1. 从上面的https链接下载包,并将其放在我的情况下预期的位置"C:\Python27\"

此文件被放置在该位置触发此逻辑语句:

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)

就像魔术一样,软件包将被安装。

相似问题