Подтвердить что ты не робот

Установка 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>
4b9b3361

Ответ 1

По-видимому, вы можете просто задать переменную среды:

экспортировать http_proxy = http://<user> : < пароль > @<proxy_host_name > : <port>

Например:

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

Ответ 2

В Windows 7 с PowerShell указанные выше параметры прокси игнорируются, и инструмент не будет работать. Но я нашел решение.

Я изменил процедуру download_file_powershell, добавив

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

внутри скрипта, который используется для загрузки через класс WebClient. Ниже приведена полная функция 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)

Ответ 3

Если у вас уже есть параметр переменной среды 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"

Постоянная командная строка (машина aka Все пользователи):

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

Постоянный с помощью панели управления:

  • Пуск → Панель управления → Учетные записи пользователей
  • На левой панели нажмите "Изменить переменные среды"
  • Нажмите "Создать.." в "Пользовательские переменные" или "Системные переменные" (в зависимости от того, что вы хотите)
  • Установить имя переменной: HTTP_PROXY и значение переменной: http:/proxy.example.com
  • Нажмите "Создать.." в "Пользовательские переменные" или "Системные переменные" (в зависимости от того, что вы хотите)
  • Установить имя переменной: HTTPS_PROXY и значение переменной: https:/proxy.example.com
  • Нажмите "Ok"

Ответ 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)

Ответ 5

Я столкнулся с той же проблемой, и это решение, которое я нашел. Я признаю, что это не идеально, но это единственный способ найти эту проблему в Windows.

  • Скачать. ez_setup.py.
  • Отредактируйте следующую строку, чтобы показать вам, где файл ожидает загрузки зашифрованного пакета:

print 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)

Это дает следующий вывод, когда вы выполняете script в моем случае: "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 Exception, вызывающий "DownloadFile" с аргументами "2": "Удаленный сервер ответил на ошибку: (407) Требуется аутентификация прокси". На линии: 1 char: 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

  • Загрузите пакет из 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)

Как будто по волшебству пакет будет установлен.