52

Python 2.7.9-2 amd64 を使用する Debian 8 システムで問題が発生しました。

    marius@pydev:/usr/lib/python2.7/dist-packages/urllib3/contrib$ pip search doo
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 356, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2476, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2190, in load
    ['__name__'])
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 74, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/usr/lib/python2.7/dist-packages/pip/vcs/mercurial.py", line 9, in <module>
    from pip.download import path_to_url
  File "/usr/lib/python2.7/dist-packages/pip/download.py", line 22, in <module>
    import requests, six
  File "/usr/local/lib/python2.7/dist-packages/requests/__init__.py", line 53, in <module>
    from .packages.urllib3.contrib import pyopenssl
  File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 73, in <module>
    ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,
**AttributeError: 'module' object has no attribute 'PROTOCOL_SSLv3'**

ライブラリにチェックインし、/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py にパッチを適用しようとしました

    from .. import connection
from .. import util

__all__ = ['inject_into_urllib3', 'extract_from_urllib3']

# SNI only *really* works if we can read the subjectAltName of certificates.
HAS_SNI = SUBJ_ALT_NAME_SUPPORT

# Map from urllib3 to PyOpenSSL compatible parameter-values.
_openssl_versions = {
    ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD,
    **ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,**
    ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD,
}
_openssl_verify = {
    ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE,
    ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER,
    ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER
                       + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
}

誰かがこれを修正する方法を教えてもらえますか? 誰かが手がかりを持っていれば、それは素晴らしいことです。問題をグーグルで調べたところ、不完全なパッチしか見つかりませんでした。これも修正されれば、おそらくバグトラッカーのケースです。すべての Python パッケージでこの問題が発生します。

4

7 に答える 7

75

これは実際には の問題でありurllib3、 の問題ではありませんpyopenssl。Debianは最近、SSLv3 サポートなしで OpenSSL をコンパイルしurllib3、サポートがあると仮定しました。

この問題は、 の 1.10 リリースの一部であるコミット b9b3b0102 で修正されましたurllib3

urllib3の一部として使用しておりrequests、これは によって使用されてpipいるため、最新バージョンの に更新するだけで十分ですrequests。執筆時点で、現在のバージョンは修正を含む 2.6.0 です。

# pip install requests==2.6.0

requestsニワトリが先か卵が先かという問題が原因で、アップグレード中に問題が発生する場合があります。これを修正するには、一時的にpyopensslパッケージを削除し、アップグレードrequestsして再インストールしてみてくださいpyopenssl

pipさらに、更新を試みる前に、次の行を使用して更新することをお勧めしますrequests

# sudo easy_install --upgrade pip
于 2015-03-16T15:52:50.080 に答える
47

問題を解決する別の方法は、使用することです

sudo easy_install --upgrade pip

その後、pipを通常どおり使用します

于 2015-03-31T22:12:27.910 に答える
14

同じエラーを受け取りました。
以前の回答と併せて:

sudo easy_install --upgrade pip

私も実行する必要がありました:

sudo pip uninstall pyopenssl
sudo pip install mozdownload

これは私のエラーを修正しました。おそらく他の人を助けることができます。私はグーグルでここに来ました:

AttributeError:「モジュール」オブジェクトに属性「PROTOCOL_SSLv3」がありません

于 2016-03-18T14:41:28.043 に答える
6

今日、Ansibleでこの問題に遭遇しました。私はそれを解決しました: pip uninstall pyopenssl

多分これは同じ状況で誰かを助けるでしょう

于 2016-10-27T15:37:29.800 に答える
3

Ubuntu 14 から 16 へのアップグレード後にこのエラーを受け取りました。アップグレードにより一部の Python パスが変更され、一部のコア パッケージが破損しました。この答えは本質的に私のためにそれを修正しました。

sudo apt-get purge python-pkg-resources
sudo apt-get -f install
sudo rm -Rf /usr/local/bin/pip
sudo apt-get install python-pip
sudo pip install -U pip
于 2017-02-04T17:30:52.477 に答える