web-dev-qa-db-ja.com

Python AttributeError: 'module'オブジェクトには属性 'SSL_ST_INIT'がありません

私のPythonスクリプトは失敗しています:

Traceback (most recent call last):
  File "./inspect_sheet.py", line 21, in <module>
    main()
  File "./inspect_sheet.py", line 12, in main
    workbook_name=workbook_name,
  File "./google_sheets.py", line 56, in __init__
    self.login()
  File "./google_sheets.py", line 46, in login
    self.client = gspread.authorize(credentials)
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 335, in authorize
    client.login()
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 98, in login
    self.auth.refresh(http)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 598, in refresh
    self._refresh(http.request)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 769, in _refresh
    self._do_refresh_request(http_request)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 795, in _do_refresh_request
    body = self._generate_refresh_request_body()
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 1425, in _generate_refresh_request_body
    assertion = self._generate_assertion()
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 1554, in _generate_assertion
    private_key, self.private_key_password), payload)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/crypt.py", line 162, in from_string
    from OpenSSL import crypto
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import Rand, crypto, SSL
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/SSL.py", line 118, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
64
Ben Wheeler

問題はpyOpenSSLのインストール、pyOpenSSL-0.15.1にあることが判明しました。

やった:

pip uninstall pyopenssl

その後

pip install pyopenssl

...そして私のPythonスクリプトはまたうまくいった!

71
Ben Wheeler

pyopensslに関連するコマンドがどれも私のために働いていなかったのでpipでpipをアップグレードすることは働いていませんでした。 pyopenssleasy_installにアップグレードすることで、上記の問題を解決できます。

Sudo python -m easy_install --upgrade pyOpenSSL

credit @delimiter( Answer

110
Muhammad Hassan

pyopensslモジュールを更新します。

$ Sudo pip install -U pyopenssl
14
user197292

私は最近同じ問題を経験しました、そして数時間の調査の後、私はそれがNew cryptography 2. upgradeによって引き起こされたことを知りました。このアップグレードはpyopensslを使った多くのパッケージ(Sentry、Google Analyticsなど)を壊すでしょう。 1.9にダウングレードするだけで問題は解決します。

"pip install -U"を使用している場合は注意してください。これはRequirements.txtにリストされていないパッケージを自動的にアップグレードします。

9
Fei Xie

私は同じようなエラーがありました:

    from OpenSSL import Rand, crypto, SSL
  File "/usr/local/lib/python3.5/dist-packages/OpenSSL/SSL.py", line 112, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: module 'lib' has no attribute 'SSL_ST_INIT'

そして、他の答えのどれもそれを修正することができませんでした、なぜならpipは何もインストールすることができませんでした。代わりに、私が最初にしたのは端末からです。

Sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL

それからpipでpyopensslを再インストールしました:

Sudo pip install pyopenssl

そしてすべてが肉汁だった。

9
wordsforthewise

私はこれを助けました:

$ easy_install -U pip $ easy_install -U pyOpenSSL

3
felix021

私の場合、問題はパッケージがルートディレクトリにインストールされていて、私は自分のLinuxユーザーでpyopensslを要求するスクリプトを実行していたforvas。そしてそのユーザーはrootにインストールされたライブラリを使うことができません。

だから最初に私はaptitudeapt-getでパッケージを削除しなければなりませんでした。

Sudo aptitude purge python-openssl

そのため、パッケージを再度インストールする必要がありましたが、ライブラリを要求しているスクリプトを実行しているユーザーを考慮しました。 Linuxユーザーとpipの引数--userに応じて、ライブラリーがインストールされている場所を調べてください。

ケース1

forvas@server:$ pip install pyopenssl

EnvironmentErrorのためパッケージをインストールできませんでした。

[Errno 13]許可が拒否されました: '/usr/local/lib/python2.7/dist-packages/OpenSSL'

--userオプションの使用を検討するか、権限を確認してください。

ケース2

forvas@server:$ Sudo pip install pyopenssl

/usr/local/lib/python2.7/dist-packages/OpenSSL/*

/usr/local/lib/python2.7/dist-packages/pyOpenSSL-17.5.0.dist-info/*

ケース

forvas@server:$ Sudo pip install --user pyopenssl

/home/forvas/.local/lib/python2.7/site-packages/OpenSSL/*

/home/forvas/.local/lib/python2.7/site-packages/pyOpenSSL-17.5.0.dist-info/*

ケース4

root@server:$ pip install pyopenssl

/usr/local/lib/python2.7/dist-packages/OpenSSL/*

/usr/local/lib/python2.7/dist-packages/pyOpenSSL-17.5.0.dist-info/*

ケース5

root@server:$ pip install --user pyopenssl

/root/.local/lib/python2.7/site-packages/OpenSSL/*

/root/.local/lib/python2.7/site-packages/pyOpenSSL-17.5.0.dist-info/*

結論

私の問題は、ライブラリがケース5のディレクトリにインストールされていることでした。

解決策

  • パッケージをアンインストールする.

  • Linuxユーザーforvasでスクリプトを実行しているので、オプションを指定してパッケージを正しく再インストールできました2または4(このライブラリはすべてのLinuxユーザーが利用できます)またはより正確なオプション(このライブラリはLinuxユーザーのみが利用できますforvas).

3
forvas

私はbrew経由でインストールされたpython 2と3でMacOSでこの問題を抱えていました。 brew uninstalling pythonとpython @ 2は、それらのバージョンのpython用にインストールされたライブラリを削除しません。すなわち:

/usr/local/lib/python3.7/site-packages/
/usr/local/lib/python2.7/site-packages/

そこに何かが正しくなかったので、私のために働いたのはbrewのpython 2と3のためにインストールされているすべてのライブラリを削除/移動してから再開することです

brew uninstall --ignore-dependencies python@2
brew uninstall --ignore-dependencies python
Sudo mv /usr/local/lib/python3.7 ~/python3.7libs-backup
Sudo mv /usr/local/lib/python2.7 ~/python2.7libs-backup
brew install python
brew install python@2
2
Fiskabollen

私の問題は/usr/lib/python2.7/dist-packages/にあったPython opensslのバージョンが原因でした。

dpkg -l | grep opensslは示した:

ii  python-openssl                                0.15.1-2build1                               all          Python 2 wrapper around the OpenSSL library

Sudo apt-get remove python-opensslを使って削除しました。私はそれからpipの配布版をインストールするために以下を走らせました。

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

pip --versionが表示されます。

pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

私はそれから私が完了しようとしていた必要なpipインストールを実行することができました。

2
HeatfanJohn

私の場合、それはアンインストールとアップグレードのために同じエラーを投げていました。アンインストールまたはアップグレードできませんでした。

AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

以下は私のために働いた。

# rm -rf /usr/lib/python2.7/site-packages/OpenSSL/
# rm -rf /usr/lib/python2.7/site-packages/pyOpenSSL-16.1.0.dist-info
# rm -rf /usr/lib/python2.7/site-packages/pyOpenSSL-18.0.0-py2.7.Egg
# pip2.7 install pyopenssl
Collecting pyopenssl
Downloading 
.
.
100% |████████████████████████████████| 61kB 5.8MB/s 
Collecting cryptography>=2.2.1 (from pyopenssl)
.
.
Installing collected packages: cryptography, pyopenssl
Found existing installation: cryptography 1.7.2
Uninstalling cryptography-1.7.2:
  Successfully uninstalled cryptography-1.7.2
Successfully installed cryptography-2.2.2 pyopenssl-18.0.0

WARNING:アップグレード(Sudo pip install pyOpenSSL==16.2.0)またはアンインストール(pip uninstall pyopenssl)で解決しない場合にのみ試してください。

1
f-society

これらの他の解決策が私のために働かなかった後私の解決策ははるかに単純化されました。私がpipでインストール/アンインストールしようとしたものはすべて、同じエラーとスタックトレースを返しました。

私はpip3経由でpipを更新しようとしましたが、それは完璧に動作しました:

pip3 install --upgrade pip

私はpipの使用に戻り、すべてが正しく機能しました。私は、pipコマンドを実行するときにPython 3.6を参照していることに気付きました。

# pip install pyopenssl`enter code here`
Requirement already satisfied: pyopenssl in /usr/lib64/python3.6/site-packages (18.0.0)

<snipped>

Requirement already satisfied: pycparser in /usr/lib64/python3.6/site-packages (from cffi!=1.11.3,>=1.7->cryptography>=2.2.1->pyopenssl) (2.19)
1
LesterCovax

万が一他の誰かがこの仕事をするための正しい呪文を正確に見つけていないのですが、2018年11月の時点で私のために働いていたのは次のとおりです。

Sudo rm -rf /usr/local/lib/python2.7/dist-packages/OpenSSL/ Sudo apt install --reinstall python-openssl

がんばろう!

1
brianpgerson

私はUbuntu 16.04でも同じ問題を抱えていましたが、次のようなひねりを加えました。(私の場合は、pysolrを使ってceleryワーカーを実行する前の. venv/bin/activate、要求など) - パス、そしてpythonのパス - 問題がありました(そしてsupervisordから走っている同じ問題)。また、重要であれば、virtualenvは同じUbuntuバージョンのマシンの他の場所にバンドルされています。

解決方法は簡単でした。PATHに/full/path/to/venv/binを追加すると(ここで推奨されているように https://serverfault.com/questions/331027/supervisord-how-to-append-to-path )、これが解決されました。

残念ながら、これが原因でどのような更新が行われたのか、私はまだ正確に指摘していませんが、これが誰かに役立つことを願っています。

1
Roman Susi

私がUbuntu 16.04 VMのコンソールに同じように pythonのスタックダンプを表示していました。

    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

Pipはpyopensslがインストールされていないと報告しました。

私は代わりにこれをしなければなりませんでした:

$ apt install --reinstall python-openssl
1
Deepak Mohanty

AttributeError: 'module' object has no attribute 'SSL_ST_INIT'エラーも見ました。

やる

Sudo pip install pyOpenSSL==16.2.0

私のためにそれを解決しました。

0
Vikram Hosakote

私は同じ問題を抱えていました、そして、pipはもう働かなかったので、私は手動で彼の仕事をしなければなりませんでした:

wget https://files.pythonhosted.org/packages/40/d0/8efd61531f338a89b4efa48fcf1972d870d2b67a7aea9dcf70783c8464dc/pyOpenSSL-19.0.0.tar.gz
tar -xzvf pyOpenSSL-19.0.0.tar.gz
cd pyOpenSSL-19.0.0
Sudo python setup.py install

その後、すべてが期待通りに動作しました。

0
Delaballe

私はちょうど私のUbuntu 16.04ホストでこれに遭遇しました。 python-opensslとpython-crypotgraphyのaptリポジトリパッケージの間にバージョンの衝突があるようです。

この状態になると、システム標準のpipも実行できなくなります。このようにして、ツリーの/ usr/local部分を除外したPYTHONPATH環境変数を手動で設定することで、鶏と卵の問題を回避しました。

    $ export PYTHONPATH="/usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0"
    $ /usr/bin/pip uninstall cryptography
    $ unset PYTHONPATH

私はPythonシェルで使用するために上記のライブラリディレクトリのリストを取得しました:

    import sys
    for p in sys.path:
       print(p)

次に、/ usr/localディレクトリ以外のリストされているものすべてをコピーします。あなたのシステムはそのパスに別のリストを持っているかもしれません。それに応じて調整してください。

私のbash履歴には、手動のapt-get install --reinstall python-openssl python-cryptographyコマンドが散在していましたが、これは必要な場合とそうでない場合があります。

0
Joi Owen

export PYTHONPATH = "/ usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/ usr/lib/python2。 7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0 "apt -get install --reinstall python-openssl

0
YoungJeXu