pip поднимает ImportError: не может импортировать имя HTTPSHandler
После установки python-pip
пакет в Ubuntu 14.04.1 я получаю:
$ pip
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 351, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2363, in load_entry_point
return ep.load()
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2088, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 10, in <module>
from pip.util import get_installed_distributions, get_prog
File "/usr/lib/python2.7/dist-packages/pip/util.py", line 18, in <module>
from distlib import version
File "/usr/lib/python2.7/dist-packages/distlib/version.py", line 14, in <module>
from .compat import string_types
File "/usr/lib/python2.7/dist-packages/distlib/compat.py", line 31, in <module>
from urllib2 import (Request, urlopen, URLError, HTTPError,
ImportError: cannot import name HTTPSHandler
Я проверил, у меня есть libssl-dev
а также python-openssl
установлено, и проблема, кажется, в том, что ssl
модуль не может быть импортирован:
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/ssl.py", line 61, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: No module named _ssl
Все устанавливается из репозиториев Ubuntu, так что я не знаю, в чем причина проблемы.
2 ответа
После некоторой борьбы я понял это. Вкратце (не совсем уверен, нужна ли первая команда):
sudo apt-get install libssl-dev
sudo apt-get --reinstall install libpython2.7-stdlib
Длинное объяснение состоит в том, что, основываясь на тех местах, где Python ищет библиотеки:
python -c "import sys; print sys.path"
и увидев, что там был _ssl.so
файл в /usr/lib/python2.7/lib-dynload
на "здоровом" другом сервере 14.04.1 я выяснил, что пакет, ответственный за это libpython2.7-stdlib
:
$ dpkg -S /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so
libpython2.7-stdlib:amd64: /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so
После переустановки libpython2.7-stdlib
на исходном компьютере файл был воссоздан, и проблема исчезла.
sudo apt-get --reinstall install libpython2.7-stdlib
(Я действительно не знаю, как или почему этот _ssl-файл отсутствовал в системе - я не единственный, кто использует сервер...)
Возможно, в вашей системе установлено более одной версии Python. пип использует неверную версию Python python -V
чтобы увидеть версию Python по умолчанию, вам может потребоваться изменить пункт, чтобы использовать правильную версию, открыв /usr/bin/pip
с вашим любимым текстовым редактором, затем измените:#!/usr/bin/python
к правильной версии, например #!/usr/bin/python2.6