Un script de Python mío está fallando con:
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-opensslEjecuto este problema con debian-jessie, el paquete actualizado (16.0.0-1 ~ bpo8 + 1) de jessie-backports tampoco funciona, así que tengo que actualizarlo usando pip de acuerdo con las soluciones a continuación (la versión utilizada era 18.0 .0)Respuestas:
Actualizar
pyopensslcon pip no funcionaba ya que ninguno de los comandos relacionados conpipfuncionaba para mí. Actualizandopyopensslconeasy_install, el problema anterior se puede resolver.credit @delimiter ( Respuesta )
fuente
pipfuncionó bien después de eso.AttributeErrorel OP.Resultó que el problema estaba en mi instalación de pyOpenSSL, pyOpenSSL-0.15.1.
Yo hice:
y entonces
... ¡y mi script de Python funcionó de nuevo!
fuente
pipsolo, esto lo resolviósudo easy_install pyOpenSSLsudo aptitude purge python-opensslporque se instaló conaptitude. Creo que podría hacer lo mismo conapt-getpip. También lo hizorm -rf cryptographyy podría volver a ejecutar pip.Actualice su
pyopensslmódulo:fuente
Tuve un error similar:
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'y ninguna de las otras respuestas pudo solucionarlo, porque pip no pudo instalar nada. En cambio, lo que hice fue esto desde la terminal primero:
sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSLLuego reinstaló pyopenssl con pip:
y todo fue salsa.
fuente
rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/OpenSSLPrueba con los siguientes comandos:
fuente
Experimenté el mismo problema recientemente y después de algunas horas de investigación, descubrí que fue causado por New cryptography 2.0 actualización de la . Esta actualización romperá muchos paquetes usando pyopenssl (como Sentry, Google Analytics, etc.). Simplemente degradarlo a 1.9 resolverá el problema.
Tenga cuidado si está usando "pip install -U", actualizará automáticamente los paquetes que no están listados en requirements.txt.
fuente
En mi caso, el problema era que el paquete estaba instalado en los directorios raíz y estaba ejecutando el script que pedía
pyopensslcon mi usuario de Linux forvas . Y ese usuario no puede usar las bibliotecas instaladas en root.Así que primero tuve que eliminar el paquete con
aptitudeoapt-get.Por lo tanto, tuve que volver a instalar el paquete, pero teniendo en cuenta el usuario que está ejecutando el script que solicita la biblioteca. Eche un vistazo a dónde está instalada la biblioteca según el usuario de Linux y el argumento
--userdepip.Caso 1
Caso 2
Caso 3
Caso 4
Caso 5
Conclusión
Mi problema fue que la librería estaba instalada en los directorios del caso 5 .
Solución
Desinstalar el paquete.
Mientras ejecuto el script con las formas de usuario de Linux , pude reinstalar el paquete correctamente con las opciones 2 o 4 (en las que la biblioteca está disponible para todos los usuarios de Linux) o más precisa, la opción 3 (en la que se solo disponible para usuarios de Linux forvas ).
fuente
sudo python3 -m pip install --user pyopenssl, y los paquetes se almacenarían en/home/forvas/.local/lib/python3.6/site-packages.Tuve el mismo problema y como pip ya no funcionaba, tuve que hacer su trabajo manualmente:
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 installDespués de eso, todo funcionó como se esperaba.
fuente
Mi problema fue causado por la versión de Python openssl que estaba en
/usr/lib/python2.7/dist-packages/.dpkg -l | grep opensslmostró:ii python-openssl 0.15.1-2build1 all Python 2 wrapper around the OpenSSL libraryLo eliminé usando
sudo apt-get remove python-openssl. Luego ejecuté lo siguiente para instalar la versión de distribución de pip.pip --versionahora muestra:pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)Luego pude realizar la instalación de pip necesaria que estaba tratando de completar.
fuente
Esto funcionó para mí:
fuente
Yo también vi el
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'error.Haciendo
sudo pip install pyOpenSSL==16.2.0lo resolvió por mí.
fuente
En caso de que alguien más no encuentre exactamente los encantamientos correctos para que esto funcione, a partir de noviembre de 2018, lo que funcionó para mí fue:
sudo rm -rf /usr/local/lib/python2.7/dist-packages/OpenSSL/ sudo apt install --reinstall python-openssl¡Buena suerte!
fuente
Tuve este problema en MacOS con python 2 y 3 instalados a través de brew. Resulta que
brew uninstalling python y python @ 2 no eliminan las bibliotecas que se instalaron para esas versiones de python; es decir, en:/usr/local/lib/python3.7/site-packages/y/usr/local/lib/python2.7/site-packages/Algo allí no estaba bien, así que lo que funcionó para mí fue eliminar / mover todas las bibliotecas instaladas para brew's python 2 y 3 y comenzar de nuevo (y asegúrese de usar virtualenvs de aquí en adelante):
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@2fuente
En mi caso, arrojaba el mismo error para desinstalar y actualizar. No pude desinstalar ni actualizar.
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'Seguir funcionó para mí.
# 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.0ADVERTENCIA : intente esto solo si actualizar (
sudo pip install pyOpenSSL==16.2.0) o desinstalar (pip uninstall pyopenssl) no ayudafuente
Tuve el mismo problema en Ubuntu 16.04, pero con el siguiente giro: cuando se activó virtualenv (
. venv/bin/activateantes de ejecutar apio trabajadores con pysolr, solicitudes, etc. en mi caso), todo funcionó perfectamente, pero cuando ejecuté apio desde la línea de comando usando rutas completas y rutas de Python: había un problema (y el mismo problema se ejecutaba desde supervisord). Además, si es importante, virtualenv se ha incluido en otro lugar de la máquina con la misma versión de Ubuntu.La solución fue simple: agregar
/full/path/to/venv/bina PATH (como se recomienda aquí /server/331027/supervisord-how-to-append-to-path ) resolvió esto.Desafortunadamente, todavía no he identificado qué tipo de actualización causó esto, pero espero que esto pueda ayudar a alguien.
fuente
Acabo de encontrar esto en mi host Ubuntu 16.04. Parece haber un conflicto de versiones entre los paquetes de repositorio de apt para python-openssl y python-crypotgraphy, frente a lo que alguien instaló manualmente con pip en /usr/local/python2.7/dist-packages.
Una vez que entró en este estado, el pip estándar del sistema tampoco se pudo ejecutar. Resolví el problema del huevo y la gallina configurando manualmente una variable de entorno PYTHONPATH que excluía la parte / usr / local del árbol de la siguiente manera:
$ 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 PYTHONPATHAdquirí la lista anterior de directorios de bibliotecas para usar con el shell de Python:
import sys for p in sys.path: print(p)y luego copiar todo lo que aparece en la lista excepto el directorio / usr / local. Su sistema puede tener una lista diferente en su ruta. Ajustar en consecuencia.
También tuve algunos
apt-get install --reinstall python-openssl python-cryptographycomandos manuales dispersos en mi historial de bash, que pueden haber sido necesarios o no.fuente
Mi solución fue mucho más simplista después de que estas otras soluciones no me funcionen. Todo lo que intenté instalar / desinstalar a través de pip devolvió el mismo error y stacktrace.
Terminé tratando de actualizar pip a través de pip3 y funcionó perfectamente:
pip3 install --upgrade pipVolví a usar pip y todo funcionó correctamente. Sin embargo, noté que hacía referencia a Python 3.6 cuando ejecutaba los comandos pip.
# 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)fuente
Prueba con:
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-opensslfuente
Estaba viendo un volcado de pila de Python similar en la consola de mi máquina virtual Ubuntu 16.04 cuando probé ssh en la máquina virtual.
SSL_ST_INIT = _lib.SSL_ST_INIT AttributeError: 'module' object has no attribute 'SSL_ST_INIT'pipinformó quepyopensslno estaba instalado.Tuve que hacer esto en su lugar:
fuente
Esta es una publicación más antigua, así que estoy respondiendo para ayudar a alguien a fines de 2019 ... mi problema tenía que ver con Python 2 vs 3. Estoy usando Python 3 exclusivamente; no más Python heredado. Pero mi sistema operativo (por ejemplo, Ubuntu 16.04) todavía tiene Python 2.7 instalado. Por lo tanto, al ejecutar global
pipde forma predeterminada (por ejemplo, no en un virtualenv), estaba llamando a la versión Python 2 depip.Para mí, utilicé lo siguiente para solucionar este problema.
Desinstalar
docker-compose:Reinstalar
docker-composepara mi versión de Python:fuente
Estoy ejecutando OSX 10.15.5 Catalina y usando pyenv.
Después de haber probado varias otras soluciones en esta página, lo que funcionó para mí es:
pyenv uninstall 3.6.8 pyenv install 3.6.8Debo admitir que no estoy seguro de por qué esto resolvió este problema, porque recientemente instalé esta versión de Python.
fuente