python2 と OpenSSL が Kali 上で連携しません - どうすれば修正できますか?

python2 と OpenSSL が Kali 上で連携しません - どうすれば修正できますか?

私は、amd64 上の Kali GNU/Linux Rolling (現在のバージョン 2017.3) という Kali Linux ディストリビューションを持っています。私はこれを定期的に最新の状態に保っており、システム ファイルやパッケージ管理には手を出していません。しかし、しばらく前に python2 と OpenSSL が連携しなくなりました。最初は単に奇妙だったのですが、今では大きな問題になっています。たとえば、次のような単純な呼び出しは失敗します。

# pip
/usr/lib/python2.7/dist-packages/cffi/model.py:532: UserWarning: 'point_conversion_form_t' has no values explicitly defined; guessing that it is equivalent to 'unsigned int'
  % self._get_c_name())
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 21, in <module>
    from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning
  File "/usr/lib/python2.7/dist-packages/pip/_vendor/__init__.py", line 64, in <module>
    vendored("cachecontrol")
  File "/usr/lib/python2.7/dist-packages/pip/_vendor/__init__.py", line 36, in vendored
    __import__(modulename, globals(), locals(), level=0)
  File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/__init__.py", line 9, in <module>
  File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/wrapper.py", line 1, in <module>
  File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/adapter.py", line 4, in <module>
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/__init__.py", line 52, in <module>
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/packages/__init__.py", line 59, in <module>
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/packages/__init__.py", line 32, in vendored
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/contrib/pyopenssl.py", line 47, in <module>
  File "/usr/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 112, in <module>
    if _lib.Cryptography_HAS_SSL_ST:
AttributeError: 'FFILibrary' object has no attribute 'Cryptography_HAS_SSL_ST'

さまざまな検索エンジンの結果を徹底的に調べたところ、これは既知の非互換性の問題のようですが、具体的で明確な解決策はないようです。私が不思議に思うのは、アクティブにメンテナンスされているディストリビューションでどうしてこのようなことが起こるのかということです。(実際、同じセットアップを使用している同僚にはこの問題は発生していません。)

ディストリビューション全体を再インストールせずにこれを修復/修正する簡単な方法はありますか?

インストールされているバージョンは、python/kali-rolling 2.7.14-1、python-openssl/kali-rolling 16.2.0-1、python-cffi/kali-rolling 1.9.1-2 です。

答え1

pipディストリビューションリポジトリからインストールしたと想定していますか?

もしそうなら、現在のバージョンを削除してpip取得pip.py:

curl -o ./get-pip.py https://bootstrap.pypa.io/get-pip.py
python3 ./get-pip.py
python2 ./get-pip.py

これにより、適切な依存関係がすべて取得され、pip再び動作し始めます。

答え2

strace のおかげで、 stuff in が/usr/lib/python2.7/dist-packages原因だったことがわかりました。それを削除することで問題は解決しました。

学んだ教訓: 非標準パッケージを必要とするプログラムには仮想環境を使用します。

関連情報