Установка простой установки Python с помощью ez setup.py из-за прокси-сервера
есть ли способ установить easy_install Python с помощью 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:jsearspythonez_setup.py", line 278, in <module>
main(sys.argv[1:])
File "C:jsearspythonez_setup.py", line 210, in main
egg = download_setuptools(version, delay=0)
File "C:jsearspythonez_setup.py", line 158, in download_setuptools
src = urllib2.urlopen(url)
File "C:jsearsPython27liburllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "C:jsearsPython27liburllib2.py", line 400, in open
response = self._open(req, data)
File "C:jsearsPython27liburllib2.py", line 418, in _open
'_open', req)
File "C:jsearsPython27liburllib2.py", line 378, in _call_chain
result = func(*args)
File "C:jsearsPython27liburllib2.py", line 1207, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "C:jsearsPython27liburllib2.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>
5 ответов
в 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)
если у вас уже есть набор переменных среды 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
постоянный через пульт управления:
- Пуск -> Панель Управления -> Учетные Записи Пользователей
- на левой панели нажмите "изменить переменные среды"
- Нажать "Новая.."в" пользовательских переменных "или" системных переменных " (в зависимости от того, что вы хотите)
- установить имя переменной: HTTP_PROXY и значение переменной: http:/proxy.example.com
- Нажать "Новая.."в" пользовательских переменных "или" системных переменных " (в зависимости от того, что вы хотите)
- установить имя переменной: HTTPS_PROXY и значение переменной: https:/proxy.example.com
- Нажмите "Ok"
видимо, вы можете просто установить переменную окружения:
экспорт http_proxy=http: / / :@
:
например:
экспорт http_proxy=http://admin:password@proxy.example.com:80
вы также можете установить в коде:
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)
Я только что столкнулся с той же проблемой, и это решение, которое я нашел. Я признаю, что это не идеально, но это единственный способ, который я нашел вокруг этой проблемы в Windows.
- скачать. ez_setup.py.
- отредактируйте следующую строку, чтобы показать, где файл ожидает загрузки пакета на молнии:
печать 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.исполняемый ez_setup.py"
выход:
C:\Python27\setuptools-1.4.2.смола.gz Скачивание https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz Исключение, вызывающее "DownloadFile" с аргументом(аргументами) "2": "удаленный сервер вернул ошибку: (407) требуется аутентификация Прокси." На линии: 1 char: 47 + (система new-object.Сеть.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
- загрузите пакет из ссылки 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)
как по волшебству, пакет будет установлен.