Ein Python-Skript von mir schlägt fehl mit:
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'
python-openssl
(16.0.0-1 ~ bpo8 + 1) von jessie-backports funktioniert ebenfalls nicht. Daher muss ich es mit pip gemäß den folgenden Lösungen aktualisieren (verwendete Version war 18.0) .0)Antworten:
Das Upgrade
pyopenssl
mit pip funktionierte nicht, da keiner der Befehle, auf diepip
sich bezogen, für mich funktionierte. Durch ein Upgradepyopenssl
miteasy_install
kann das oben genannte Problem gelöst werden.credit @delimiter ( Antwort )
quelle
pip
funktionierte danach einwandfrei.AttributeError
im OP.Es stellte sich heraus, dass das Problem bei meiner Installation von pyOpenSSL, pyOpenSSL-0.15.1 lag.
Ich tat:
und dann
... und mein Python-Skript hat wieder funktioniert!
quelle
pip
,sudo easy_install pyOpenSSL
sudo aptitude purge python-openssl
weil es mit installiert wurdeaptitude
. Ich denke, ich könnte das gleiche tun mitapt-get
pip
. Das tatrm -rf cryptography
und konnte Pip wieder laufen lassen.Aktualisieren Sie Ihr
pyopenssl
Modul:quelle
Ich hatte einen ähnlichen Fehler:
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'
und keine der anderen Antworten konnte das Problem beheben, da pip nichts installieren konnte. Stattdessen habe ich dies zuerst vom Terminal aus getan:
sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL
Dann pyopenssl mit pip neu installieren:
und alles war Soße.
quelle
rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/OpenSSL
Versuchen Sie es mit den folgenden Befehlen:
quelle
Ich habe das gleiche Problem kürzlich festgestellt und nach einigen Stunden Untersuchung festgestellt, dass es durch das Upgrade von New Cryptography 2.0 verursacht wurde . Durch dieses Upgrade werden viele Pakete mit pyopenssl (wie Sentry, Google Analytics usw.) zerstört. Ein Downgrade auf 1.9 löst das Problem.
Seien Sie vorsichtig, wenn Sie "pip install -U" verwenden, werden automatisch Pakete aktualisiert, die nicht in der Datei "resources.txt" aufgeführt sind.
quelle
In meinem Fall bestand das Problem darin, dass das Paket in Stammverzeichnissen installiert wurde und ich das Skript ausführte, das
pyopenssl
mit meinen Linux-Benutzerforen angefordert wurde . Und dieser Benutzer kann die in root installierten Bibliotheken nicht verwenden.Also musste ich zuerst das Paket mit
aptitude
oder entfernenapt-get
.Daher musste ich das Paket erneut installieren, aber den Benutzer berücksichtigen, der das Skript ausführt, das nach der Bibliothek fragt. Sehen Sie sich an, wo die Bibliothek installiert ist, abhängig vom Linux-Benutzer und dem Argument
--user
vonpip
.Fall 1
Fall 2
Fall 3
Fall 4
Fall 5
Fazit
Mein Problem war, dass die Bibliothek in den Verzeichnissen von Fall 5 installiert wurde .
Lösung
Paket deinstallieren.
Während ich das Skript mit Linux-Benutzerforen ausführe , konnte ich das Paket mit den Optionen 2 oder 4 (in denen die Bibliothek für alle Linux-Benutzer verfügbar ist) oder genauer mit der Option 3 (in der sich die Bibliothek befindet ) richtig neu installieren nur für Linux-Benutzer verfügbar ( forvas ).
quelle
sudo python3 -m pip install --user pyopenssl
und die Pakete würden in gespeichert/home/forvas/.local/lib/python3.6/site-packages
.Ich hatte das gleiche Problem und da pip nicht mehr funktionierte, musste ich seine Arbeit manuell erledigen:
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
Danach hat alles wie erwartet funktioniert.
quelle
Mein Problem wurde durch die Version von Python openssl verursacht, die sich in befand
/usr/lib/python2.7/dist-packages/
.dpkg -l | grep openssl
zeigte:ii python-openssl 0.15.1-2build1 all Python 2 wrapper around the OpenSSL library
Ich habe es mit entfernt
sudo apt-get remove python-openssl
. Ich habe dann Folgendes ausgeführt, um die Distributionsversion von pip zu installieren.pip --version
zeigt jetzt an:pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
Ich konnte dann die erforderliche Pip-Installation durchführen, die ich abschließen wollte.
quelle
Das hat bei mir funktioniert:
quelle
Ich habe den
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
Fehler auch gesehen.Tun
sudo pip install pyOpenSSL==16.2.0
löste es für mich.
quelle
Nur für den Fall, dass jemand anderes nicht genau die richtigen Beschwörungsformeln findet, um diese Arbeit zu machen, war ab November 2018 das, was für mich funktioniert hat:
sudo rm -rf /usr/local/lib/python2.7/dist-packages/OpenSSL/ sudo apt install --reinstall python-openssl
Viel Glück!
quelle
Ich hatte dieses Problem unter MacOS mit Python 2 und 3, die über Brew installiert wurden. Es stellt sich heraus, dass mit
brew uninstall
Python und Python @ 2 keine Bibliotheken entfernt werden, die für diese Python-Versionen installiert wurden. dh in:/usr/local/lib/python3.7/site-packages/
und/usr/local/lib/python2.7/site-packages/
Da drin stimmte etwas nicht, also funktionierte es für mich, alle installierten Bibliotheken für Brews Python 2 und 3 zu löschen / zu verschieben und erneut zu starten (und ab jetzt nur noch virtuelle Umgebungen zu verwenden):
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
quelle
In meinem Fall wurde beim Deinstallieren und Aktualisieren derselbe Fehler ausgegeben. Ich konnte nicht deinstallieren oder aktualisieren.
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
Das Folgende hat bei mir funktioniert.
# 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
WARNUNG : Versuchen Sie dies nur, wenn ein Upgrade (
sudo pip install pyOpenSSL==16.2.0
) oder eine Deinstallation (pip uninstall pyopenssl
) nicht hilftquelle
Ich hatte das gleiche Problem unter Ubuntu 16.04, aber mit der folgenden Wendung: Als virtualenv aktiviert wurde (
. venv/bin/activate
bevor in meinem Fall Sellerie-Arbeiter mit Pysolr, Anfragen usw. ausgeführt wurden), funktionierte alles perfekt, aber als ich Sellerie über die Befehlszeile mit vollständigen Pfaden ausführte und Python-Pfade - Es gab ein Problem (und dasselbe Problem, das vom Supervisord ausgeführt wurde). Falls wichtig, wurde virtualenv an anderer Stelle auf dem Computer mit derselben Ubuntu-Version gebündelt.Die Lösung war einfach: Hinzufügen
/full/path/to/venv/bin
zu PATH (wie hier empfohlen) /server/331027/supervisord-how-to-append-to-path ) löste dieses Problem.Leider habe ich noch nicht genau festgelegt, welche Art von Update dies verursacht hat, aber hoffentlich kann dies jemandem helfen.
quelle
Ich bin gerade auf meinem Ubuntu 16.04-Host darauf gestoßen. Es scheint einen Versionskonflikt zwischen den apt-Repo-Paketen für python-openssl und python-crypotgraphy zu geben, und dem, was jemand manuell mit pip in /usr/local/python2.7/dist-packages installiert hat.
Sobald es in diesen Zustand gelangt ist, kann der Systemstandard pip auch nicht ausgeführt werden. Ich habe das Henne-Ei-Problem umgangen, indem ich manuell eine PYTHONPATH-Umgebungsvariable festgelegt habe, die den / usr / local-Teil des Baums folgendermaßen ausschloss:
$ 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
Ich habe die obige Liste der Bibliotheksverzeichnisse zur Verwendung mit der Python-Shell erworben:
import sys for p in sys.path: print(p)
und dann kopieren Sie alles, was aufgelistet ist, mit Ausnahme des Verzeichnisses one / usr / local. Ihr System hat möglicherweise eine andere Liste im Pfad. Dementsprechend anpassen.
Ich hatte auch einige manuelle
apt-get install --reinstall python-openssl python-cryptography
Befehle in meiner Bash-Geschichte verstreut, die möglicherweise notwendig waren oder nicht.quelle
Meine Lösung war viel einfacher, nachdem diese anderen Lösungen für mich nicht funktionierten. Alles, was ich über pip installieren / deinstallieren wollte, gab den gleichen Fehler und Stacktrace zurück.
Am Ende habe ich versucht, pip über pip3 zu aktualisieren und es hat einwandfrei funktioniert:
pip3 install --upgrade pip
Ich habe wieder Pip benutzt und alles hat richtig funktioniert. Ich habe jedoch bemerkt, dass es beim Ausführen der pip-Befehle auf Python 3.6 verweist.
# 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)
quelle
Versuche es mit:
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
quelle
Ich habe einen ähnlichen Python-Stack-Dump auf der Konsole meiner Ubuntu 16.04-VM gesehen, als ich versucht habe, ssh in die VM zu integrieren.
SSL_ST_INIT = _lib.SSL_ST_INIT AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
pip
berichtet, dasspyopenssl
nicht installiert wurde.Ich musste das stattdessen tun:
quelle
Dies ist ein älterer Beitrag, daher antworte ich, um hoffentlich Ende 2019 jemandem zu helfen ... mein Problem hatte mit Python 2 vs 3 zu tun. Ich verwende ausschließlich Python 3; kein altes Python mehr. Auf meinem Betriebssystem (z. B. Ubuntu 16.04) ist Python 2.7 noch installiert. Wenn
pip
ich also standardmäßig global ausgeführt werde (z. B. nicht in einer virtuellen Umgebung), habe ich die Python 2-Version von aufgerufenpip
.Für mich habe ich Folgendes verwendet, um dieses Problem zu beheben.
Deinstallieren
docker-compose
:Neu installieren
docker-compose
für meine Version von Python:quelle