83 votes

Python Erreur d'attribut : l'objet 'module' n'a pas d'attribut 'SSL_ST_INIT'

Un de mes scripts Python échoue avec :

Traceback (most recent call last):
  File "./inspect_sheet.py", line 21, in 
    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 
    from OpenSSL import rand, crypto, SSL
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/SSL.py", line 118, in 
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: l'objet 'module' n'a pas d'attribut 'SSL_ST_INIT'

0 votes

Je rencontre ce problème avec debian-jessie, le package mis à jour python-openssl (16.0.0-1~bpo8+1) depuis jessie-backports ne fonctionne pas non plus, donc je dois le mettre à niveau en utilisant pip selon les solutions ci-dessous (la version utilisée était 18.0.0)

163voto

Muhammad Hassan Points 6829

Mettre à niveau pyopenssl avec pip ne fonctionnait pas car aucune des commandes liées à pip ne fonctionnait pour moi. En mettant à niveau pyopenssl avec easy_install, le problème ci-dessus peut être résolu.

sudo python -m easy_install --upgrade pyOpenSSL

crédit @delimiter (Réponse)

2 votes

Merci! J'ai dû redémarrer mon terminal / me reconnecter à mon serveur après cette commande, et pip a bien fonctionné après cela.

0 votes

Rencontrez la nouvelle erreur - erreur: le script de configuration s'est terminé avec une erreur: la commande 'gcc' a échoué avec le code de sortie 1

0 votes

C'est utile, probablement, mais même en vous déconnectant et en vous reconnectant à nouveau, je continue à obtenir l'AttributeError dans le message d'origine.

82voto

Benjamin Wheeler Points 488

Il s'est avéré que le problème était avec mon installation de pyOpenSSL, pyOpenSSL-0.15.1 .

J'ai fait :

pip uninstall pyopenssl

puis

pip install pyopenssl

... et mon script Python a fonctionné à nouveau !

36 votes

J'ai eu des problèmes pour exécuter pip lui-même, cela a été résolu en exécutant sudo easy_install pyOpenSSL

2 votes

Venait de mettre à niveau la cryptographie; votre solution était suffisante dans mon cas

3 votes

Dans mon cas, j'ai dû désinstaller de cette manière : sudo aptitude purge python-openssl car il avait été installé avec aptitude. Je pense que je pourrais faire la même chose avec apt-get.

17voto

user197292 Points 261

Mettez à jour votre module pyopenssl:

$ sudo pip install -U pyopenssl

1 votes

Merci, je pense que c'est plus efficace que de désinstaller et réinstaller à nouveau.

1 votes

Si vous utilisez un environnement virtuel, vous n'avez pas besoin de sudo.

17voto

wordsforthewise Points 2907

J'ai eu une erreur similaire:

    from OpenSSL import rand, crypto, SSL
  File "/usr/local/lib/python3.5/dist-packages/OpenSSL/SSL.py", line 112, in 
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: module 'lib' has no attribute 'SSL_ST_INIT'

et aucune des autres réponses n'a pu la résoudre, car pip ne pouvait rien installer. Au lieu de cela, voici ce que j'ai fait à partir du terminal en premier:

sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL

Ensuite, j'ai réinstallé pyopenssl avec pip:

sudo pip install pyopenssl

et tout était impeccable.

1 votes

Il est à noter : si vous utilisez virtualenv, alors vous devez probablement supprimer rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/Ope‌nSSL

9voto

Fei Xie Points 101

J'ai rencontré le même problème récemment et après quelques heures d'investigation, j'ai découvert que cela était causé par la mise à jour de la nouvelle cryptographie 2.0. Cette mise à jour va casser de nombreux packages utilisant pyopenssl (comme Sentry, Google Analytics, etc). Il suffit de le rétrograder en 1.9 pour résoudre le problème.

Soyez prudent si vous utilisez "pip install -U", cela mettra automatiquement à jour les packages qui ne sont pas répertoriés dans requirements.txt.

0 votes

Merci, cela a fonctionné. Mettre à niveau pyopenssl n'était pas suffisant pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X