web-dev-qa-db-ja.com

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リポジトリからインストールされるため、問題の原因はわかりません。

4
metakermit

苦労した後、私はそれを理解しました。要するに(最初のコマンドが必要かどうかは確かではありません):

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ファイルがシステムからどのように、またはなぜ失われたのか私は本当に知りません-サーバーを使用しているのは私だけではありません...)

4
metakermit