pip 引发 ImportError:无法导入名称 HTTPSHandler

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-devpython-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 存储库安装的,所以我不知道是什么导致了问题。

答案1

经过一番努力,我终于找到了答案。简而言之(不太确定第一个命令是否必要):

sudo apt-get install libssl-dev
sudo apt-get --reinstall install libpython2.7-stdlib

详细的解释是,基于 Python 寻找库的地方:

python -c "import sys; print sys.path"

并且看到在另一台“健康”的 14.04.1 服务器上有一个_ssl.so文件/usr/lib/python2.7/lib-dynload,我发现负责此问题的软件包是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 文件为什么会在系统中丢失——我不是唯一使用该服务器的人……)

答案2

您的系统中可能安装了多个 Python 版本。pip 使用了错误的 Python 版本,运行python -V以查看要使用的 Python 默认版本,您可能需要更改 pip 以使用正确的版本,方法是用/usr/bin/pip您最喜欢的文本编辑器打开,然后更改: #!/usr/bin/python为正确的版本,例如#!/usr/bin/python2.6

相关内容