ssl_st_initattributeerror ssl_st_init lib has error attribute _lib python openssl pyopenssl

lib - Python AttributeError: el objeto ''módulo'' no tiene atributo ''SSL_ST_INIT''



ssl_st_init_lib ssl_st_initattributeerror module object has no attribute ssl_st_init (18)

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.

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''


Actualice su módulo pyopenssl :

$ sudo pip install -U pyopenssl


Actualizar pyopenssl con pip no funcionaba ya que ninguno de los comandos relacionados con pip funcionaba para mí. Al actualizar pyopenssl con easy_install , se puede resolver el problema anterior.

sudo python -m easy_install --upgrade pyOpenSSL

credit @delimiter ( Answer )


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


En mi caso, el problema era que el paquete estaba instalado en los directorios raíz y estaba ejecutando el script que pedía pyopenssl con mis forvas de usuario de Linux. Y ese usuario no puede usar las bibliotecas instaladas en la raíz.

Así que primero tuve que eliminar el paquete con aptitude o apt-get .

forvas@server:$ pip install pyopenssl

Por lo tanto, tuve que instalar el paquete nuevamente, 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 --user of pip .

Caso 1

forvas@server:$ sudo pip install pyopenssl

No se pudieron instalar paquetes debido a un error de entorno:

[Errno 13] Permiso denegado: ''/usr/local/lib/python2.7/dist-packages/OpenSSL''

Considere usar la opción --user o verifique los permisos.

Caso 2

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

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

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

Caso 3

root@server:$ pip install pyopenssl

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

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

Caso 4

root@server:$ pip install --user pyopenssl

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

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

Caso 5

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

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

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

Conclusión

Mi problema fue que la biblioteca se instaló en los directorios del caso 5 .

Solución

  • Desinstalar el paquete.

  • Mientras ejecuto el script con forvas de usuario de Linux, pude reinstalar el paquete correctamente con las opciones 2 o 4 (en la que la biblioteca está disponible para todos los usuarios de Linux) o más precisa, la opción 3 (en la que la biblioteca es solo disponible para usuarios de Linux forvas ).


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 problema fue causado por la versión de Python openssl que estaba en /usr/lib/python2.7/dist-packages/ .

dpkg -l | grep openssl dpkg -l | grep openssl mostró:

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

Lo sudo apt-get remove python-openssl usando sudo apt-get remove python-openssl . Luego ejecuté lo siguiente para instalar la versión de distribución de pip.

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

pip --version ahora muestra:

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

Luego pude realizar la instalación de pip necesaria que estaba tratando de completar.


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)


Pruebe con los siguientes comandos:

sudo aptitude purge python-openssl


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 el mismo problema y como pip ya no funcionaba, tuve que hacer su trabajo manualmente:

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

Después de eso todo funcionó como se esperaba.


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.


Vi el AttributeError: ''module'' object has no attribute ''SSL_ST_INIT'' error de AttributeError: ''module'' object has no attribute ''SSL_ST_INIT'' .

Obra

sudo pip install pyOpenSSL==16.2.0

Lo resolvió por mí.