python - ssl_st_initattributeerror - ubuntu attributeerror module object has no attribute ssl_st_init




Python AttributeError: el objeto 'módulo' no tiene atributo 'SSL_ST_INIT' (12)

Un script mío de Python falla 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'

Acabo de encontrar esto en mi host Ubuntu 16.04. Parece haber un conflicto de versión entre los paquetes apt repo 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 pudo ejecutarse. Resolví el problema del huevo y la gallina estableciendo manualmente una variable de entorno PYTHONPATH que excluía la parte / usr / local del árbol de esta manera:

# 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

Adquirí la lista anterior de directorios de bibliotecas para usar con el shell de Python:

    $ 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

y luego copiando todo lo listado excepto el directorio / usr / local. Su sistema puede tener una lista diferente en su camino. Ajustar en consecuencia.

También tuve algunos manuales de apt-get install --reinstall python-openssl python-cryptography comandos dispersos en mi historial de bash, que pueden o no haber sido necesarios.


Actualice su módulo pyopenssl :

$ sudo pip install -U pyopenssl

En caso de que alguien más no encuentre exactamente los encantamientos adecuados 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!


En mi caso, arrojaba el mismo error para desinstalar y actualizar. No pude desinstalar o actualizar.

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

Lo siguiente funcionó para mí.

$ apt install --reinstall python-openssl

ADVERTENCIA : intente esto solo si la actualización ( sudo pip install pyOpenSSL==16.2.0 ) o la desinstalación ( pip uninstall pyopenssl ) no ayuda


Estaba viendo un volcado de pila de Python similar en la consola de mi VM Ubuntu 16.04 cuando intenté ssh en la VM.

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

pip informó que pyopenssl no estaba instalado.

Tuve que hacer esto en su lugar:

 sudo apt install --reinstall python-openssl 

Experimenté el mismo problema recientemente y después de unas horas de investigación, descubrí que fue causado por la actualización de New cryptography 2.0 . Esta actualización romperá muchos paquetes usando pyopenssl (como Sentry, Google Analytics, etc.). Simplemente rebajarlo a 1.9 resolverá el problema.

Tenga cuidado si está utilizando "pip install -U", actualizará automáticamente los paquetes que no figuran en require.txt.


Mi solución fue mucho más simplista después de que estas otras soluciones no funcionaran para mí. 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ó a la perfección:

pip3 install --upgrade pip

Volví a usar pip y todo funcionó correctamente. Sin embargo, noté que hacía referencia a Python 3.6 cuando ejecutaba los comandos pip.

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

Probar con:

# 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)

Resultó que el problema era con mi instalación de pyOpenSSL, pyOpenSSL-0.15.1.

Yo si:

pip uninstall pyopenssl

y entonces

pip install pyopenssl

... y mi script Python funcionó de nuevo!


Tuve el mismo problema en Ubuntu 16.04, pero con el siguiente giro: cuando se activó virtualenv ( . venv/bin/activate antes de ejecutar trabajadores de apio con pysolr, solicitudes, etc. en mi caso): todo funcionó perfectamente, pero cuando ejecuté apio desde la línea de comandos utilizando rutas completas y rutas de Python: hubo un problema (y el mismo problema se ejecutó desde el supervisor). Además, si es importante, virtualenv se ha incluido en otras partes de la máquina con la misma versión de Ubuntu.

La solución fue simple: agregar /full/path/to/venv/bin a PATH (como se recomienda aquí https://serverfault.com/questions/331027/supervisord-how-to-append-to-path ) resolvió esto.

Desafortunadamente, todavía no he señalado qué tipo de actualización causó esto, pero espero que esto pueda ayudar a alguien.


Tuve este problema en MacOS con python 2 y 3 instalado a través de brew. Resulta que brew uninstall python y python @ 2 no elimina 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 python 2 y 3 de brew y comenzar de nuevo (y asegúrese de usar virtualenvs de aquí en adelante):

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

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

Luego reinstaló pyopenssl con pip:

sudo pip install pyopenssl

y todo fue salsa.







pyopenssl