Для установки Python pip требуется server_hostname
Я закончил установку pip на linux, команда pip list
работает. Но при использовании команды pip install
она получила следующую ошибку:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/basecommand.py", line 232, in main
status = self.run(options, args)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/commands/install.py", line 339, in run
requirement_set.prepare_files(finder)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/req/req_set.py", line 333, in prepare_files
upgrade=self.upgrade,
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/index.py", line 305, in find_requirement
page = self._get_page(main_index_url, req)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/index.py", line 783, in _get_page
return HTMLPage.get_page(link, req, session=self.session)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/index.py", line 872, in get_page
"Cache-Control": "max-age=600",
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/sessions.py", line 473, in get
return self.request('GET', url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/download.py", line 365, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/sessions.py", line 461, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/cachecontrol/adapter.py", line 43, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/adapters.py", line 370, in send
timeout=timeout
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 518, in urlopen
body=body, headers=headers)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 322, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 727, in _validate_conn
conn.connect()
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/connection.py", line 238, in connect
ssl_version=resolved_ssl_version)
File "/usr/local/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg/pip/_vendor/requests/packages/urllib3/util/ssl_.py", line 254, in ssl_wrap_socket
return context.wrap_socket(sock)
File "/usr/local/lib/python2.7/ssl.py", line 350, in wrap_socket
_context=self)
File "/usr/local/lib/python2.7/ssl.py", line 537, in __init__
raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname
Как я могу это исправить?
Ответы
Ответ 1
pip 6.1.0 был выпущен, устраняя эту проблему. Вы можете обновить с помощью:
pip --trusted-host pypi.python.org install -U pip
для самообновления.
Оригинальный ответ:
Это вызвано изменением Python 2.7.9, для которого urllib3
необходимо учитывать. См. вопрос № 543 для этого проекта. Ваши библиотеки OpenSSL не поддерживают SNI, что означает, что urllib3
не будет передавать имя узла в оболочку SSL-сокета, но Python 2.7.9 ожидает, что имя хоста будет передано в любом случае для разных целей.
urllib3
косвенно используется requests
(см. requests
issue 2435), который, в свою очередь, используется pip
.
Я открыл билет чтобы отслеживать это с точки зрения pip
.
Основные проблемы были устранены разработчиками проекта и ожидают выхода новой версии. Вы можете установить текущую версию разработки pip
, если вы нетерпеливы:
pip install --trusted-host=github.com -U https://github.com/pypa/pip/archive/develop.zip
Это установит pip-6.1.0.dev0, когда версия 6.1.0 будет полностью выпущена, вы можете снова выполнить обновление с помощью pip install -U pip
, чтобы получить окончательную версию из PyPI.
Ответ 2
Я получаю ту же проблему и обнаруживаю, что ее можно избежать (pip 6.0.8) в моем случае следующим образом
pip --trusted-host pypi.python.org install <thing>