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-openssl
Ejecuto 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
pyopenssl
con pip no funcionaba ya que ninguno de los comandos relacionados conpip
funcionaba para mí. Actualizandopyopenssl
coneasy_install
, el problema anterior se puede resolver.credit @delimiter ( Respuesta )
fuente
pip
funcionó bien después de eso.AttributeError
el 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
pip
solo, esto lo resolviósudo easy_install pyOpenSSL
sudo aptitude purge python-openssl
porque se instaló conaptitude
. Creo que podría hacer lo mismo conapt-get
pip
. También lo hizorm -rf cryptography
y podría volver a ejecutar pip.Actualice su
pyopenssl
mó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/OpenSSL
Luego reinstaló pyopenssl con pip:
y todo fue salsa.
fuente
rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/OpenSSL
Prueba 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
pyopenssl
con 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
aptitude
oapt-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
--user
depip
.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 install
Despué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 openssl
mostró:ii python-openssl 0.15.1-2build1 all Python 2 wrapper around the OpenSSL library
Lo eliminé usando
sudo apt-get remove python-openssl
. Luego ejecuté lo siguiente para instalar la versión de distribución de pip.pip --version
ahora 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.0
lo 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 uninstall
ing 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@2
fuente
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.0
ADVERTENCIA : 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/activate
antes 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/bin
a 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 PYTHONPATH
Adquirí 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-cryptography
comandos 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 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.
# 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-openssl
fuente
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'
pip
informó quepyopenssl
no 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
pip
de 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-compose
para 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.8
Debo admitir que no estoy seguro de por qué esto resolvió este problema, porque recientemente instalé esta versión de Python.
fuente