簡體   English   中英

Python AttributeError: 'module' object 沒有屬性 'SSL_ST_INIT'

[英]Python AttributeError: 'module' object has no attribute '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'

升級pyopenssl與PIP不能正常工作因為沒有涉及到的命令的pip是為我工作。 通過使用easy_install升級pyopenssl ,可以解決上述問題。

sudo python -m easy_install --upgrade pyOpenSSL

信用@delimiter( 答案

原來問題出在我安裝的 pyOpenSSL, pyOpenSSL-0.15.1 上。

我做了:

pip uninstall pyopenssl

進而

pip install pyopenssl

...我的 Python 腳本又開始工作了!

更新您的pyopenssl模塊:

$ sudo pip install -U pyopenssl

我有一個類似的錯誤:

    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

一切都是肉汁。

嘗試使用以下命令:

easy_install -U pip
easy_install -U pyOpenSSL

我最近遇到了同樣的問題,經過幾個小時的調查,我發現這是由 New cryptography 2.0升級引起的。 此升級將使用 pyopenssl(如 Sentry、Google Analytics 等)破壞許多軟件包。 只需將其降級到 1.9 即可解決問題。

如果您使用“pip install -U”,請小心,它會自動升級requirements.txt 中未列出的軟件包。

就我而言,問題是該軟件包安裝在目錄中,並且我正在執行要求pyopenssl與我的 Linux 用戶forvas 的腳本 並且該用戶不能使用安裝在 root 中的庫。

所以首先我必須用aptitudeapt-get刪除包。

sudo aptitude purge python-openssl

因此,我不得不再次安裝該軟件包,但要考慮到正在執行要求庫的腳本的用戶。 根據 Linux 用戶和pip的參數--user查看庫的安裝位置。

情況1

forvas@server:$ pip install pyopenssl

由於環境錯誤,無法安裝軟件包:

[Errno 13] 權限被拒絕:'/usr/local/lib/python2.7/dist-packages/OpenSSL'

考慮使用--user選項或檢查權限。

案例二

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/*

案例3

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/*

案例四

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/*

結論

我的問題是該庫安裝在 case 5的目錄中。

解決方案

  • 卸載軟件包。

  • 當我使用 Linux 用戶forvas執行腳本時,我能夠使用選項24 (其中該庫可供所有 Linux 用戶使用)或更准確的選項3 (其中庫是僅適用於 Linux 用戶forvas )。

我遇到了同樣的問題,由於 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

之后,一切都按預期進行。

我的問題是由/usr/lib/python2.7/dist-packages/的 Python openssl 版本引起的。

dpkg -l | grep 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 安裝。

這對我有用:

sudo apt remove python-openssl

我也看到了AttributeError: 'module' object has no attribute 'SSL_ST_INIT'錯誤。

正在做

sudo pip install pyOpenSSL==16.2.0

為我解決了。

以防萬一其他人沒有找到完全正確的咒語來完成這項工作,截至 2018 年 11 月,對我有用的事情是:

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

祝你好運!

我在通過 brew 安裝了 python 2 和 3 的 MacOS 上遇到了這個問題。 事實證明, brew uninstall ing python 和 python@2 不會刪除為這些版本的python安裝的任何庫; 即在:

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

里面有些東西不對,所以對我有用的是刪除/移動 brew 的 python 2 和 3 的所有已安裝庫,然后重新開始(並確保從這里開始只使用 virtualenvs):

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

我在 Ubuntu 16.04 上遇到了同樣的問題,但有以下變化:當 virtualenv 被激活時(在我的情況下,在使用 pysolr、requests 等運行 celery 工作程序之前. venv/bin/activate ) - 一切正常,但是當我運行 celery 時從使用完整路徑和 python 路徑的命令行 - 有一個問題(和從 supervisord 運行同樣的問題)。 此外,如果重要的話,virtualenv 已與具有相同 Ubuntu 版本的機器上的其他地方捆綁在一起。

解決方案很簡單:將/full/path/to/venv/bin到 PATH (如此/full/path/to/venv/bin建議的https://serverfault.com/questions/331027/supervisord-how-to-append-to-path )解決了這個問題。

不幸的是,我還沒有指出是哪種更新導致了這種情況,但希望這可以幫助某人。

當我嘗試 ssh 進入虛擬機時,我在 Ubuntu 16.04 虛擬機的控制台上看到了類似的python 堆棧轉儲。

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

pip報告未安裝pyopenssl

我不得不這樣做:

sudo apt install --reinstall python-openssl

就我而言,它在卸載和升級時拋出了相同的錯誤。 我無法卸載或升級。

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

警告:僅當升級( sudo pip install pyOpenSSL==16.2.0 )或卸載( pip uninstall pyopenssl )沒有幫助時才嘗試此操作

我剛剛在我的 Ubuntu 16.04 主機上遇到了這個問題。 python-openssl 和 python-crypotgraphy 的 apt repo 包與有人使用 pip 手動安裝到 /usr/local/python2.7/dist-packages 中的包之間似乎存在版本沖突。

一旦進入這種狀態,系統標准 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 shell 一起使用:

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

然后復制除一個 /usr/local 目錄之外列出的所有內容。 您的系統可能在其路徑中有不同的列表。 相應調整。

我還有一些手動apt-get install --reinstall python-openssl python-cryptography命令分散在我的 bash 歷史記錄中,這可能是必要的,也可能不是必要的。

嘗試:

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"
sudo apt-get install --reinstall python-openssl

在這些其他解決方案對我不起作用之后,我的解決方案變得更加簡單。 我嘗試通過 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)

這是一篇較舊的帖子,所以我的回答是希望在 2019 年末幫助某人……我的問題與 Python 2 和 3 有關。我只使用 Python 3; 不再有遺留的 Python。 但是我的操作系統(例如 Ubuntu 16.04)仍然安裝了 Python 2.7。 因此,當默認運行全局pip時(例如,不在 virtualenv 中),我調用的是 Python 2 版本的pip

對我來說,我使用以下方法來解決這個問題。

卸載docker-compose

sudo pip3 uninstall docker-compose  
sudo pip uninstall docker-compose

為我的 Python 版本重新安裝docker-compose

sudo pip3 install docker-compose

我正在運行 OSX 10.15.5 Catalina 並使用 pyenv。

在此頁面上嘗試了許多其他解決方案后,對我有用的是:

pyenv uninstall 3.6.8
pyenv install 3.6.8

我不得不承認我不確定為什么這解決了這個問題,因為我最近才安裝了這個版本的 Python。

我得到AttributeError: module 'lib' has no attribute 'ERR_load_RAND_strings'在新安裝的 Raspberry Pi OS(以前稱為 Raspbian)Buster Lite 32bit 后 pip 安裝了一些帶有 pip 的軟件包。 其他答案的組合有效:

sudo rm -r /usr/local/lib/python3.9/dist-packages/OpenSSL
sudo pip uninstall --yes pyopenssl
sudo pip install pyopenssl

第一個命令實際上不會刪除軟件包安裝,只是刪除它的文件,但沒有它的uninstall會引發相同的錯誤。 顯然我們正在處理一個 Pi,所以最后一個將是:

sudo pip install pyopenssl --no-cache-dir

(我想我會重申其他問題,因為在搜索問題時不會出現這個 Q(它是通過谷歌的 ESP32 論壇出現的),所以我用更多的 Pi 關鍵字重復它)

對錯誤進行了研究。 然后我重新安裝並升級 OpenSSL 和 Cryptography。

sudo pip3 install pyOpenSSL --upgrade
sudo pip3 install cryptography --upgrade

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM