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í.