web-dev-qa-db-fra.com

ImportError: Aucun module nommé _ssl

Ubuntu Maverick avec Python 2.7:

Je ne sais pas quoi faire pour résoudre l'erreur d'importation suivante:

>>> import ssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/ssl.py", line 60, in <module>
   import _ssl             # if we can't import it, let the error propagate
ImportError: No module named _ssl

UPDATE: J'ai recompilé la source. Je ne parvenais pas à comprendre comment ajouter l'option --with-ssl aux réponses ci-dessous, mais je l'ai obtenu en modifiant les lignes concernant SSL dans /Modules/Setup.dist.

38
J Cooper

Avez-vous construit le Python à partir des sources? Si c'est le cas, vous avez besoin de l'option --with-ssl lors de la construction.

24
Utku Zihnioglu

Sans rapport avec la question initiale, mais parce que c'est le premier résultat de Google ... je clique sur ceci sur Google AppEngine et je devais ajouter:

libraries:
- name: ssl
  version: latest

vers app.yaml pour: https://cloud.google.com/appengine/docs/python/sockets/ssl_support

Remarque: ceci semble fonctionner jusqu'à la version 2.7.9 de Python, mais pas pour les versions 2.7.10 et 2.7.11.

57
slumtrimpet

Si vous avez construit Python à partir des sources, ceci est juste une question de dépendances: comme OpenSSL lib n'est pas installé, python ne parvient pas à installer silencieusement le module _ssl . Vous pouvez le voir dans le rapport final de la commande make :

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _ssl
_tkinter           bsddb185           dbm
dl                 gdbm               imageop
sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

L'installation d'OpenSSL lib dans l'un des chemins de bibliothèque standard (/usr/lib, /usr/local/lib...) devrait suffire. Quoi qu'il en soit, c'est comme ça que j'ai fait :-)

12
Emmanuel

Depuis que --with-ssl n'est plus reconnu, je viens d'installer libssl-dev:

Sudo apt-get install libssl-dev 

Pour redémarrer le make first clean up en:

make clean

Puis relancez et exécutez les commandes suivantes les unes après les autres:

./configure
make
make test
make install

Pour plus d'informations sur OpenSSL, visitez la page d'aide Ubuntu sur OpenSSL .

6
SSchneid

J'ai eu exactement le même problème. Je l'ai corrigé sans reconstruire python, comme suit:

1) Trouvez un autre serveur avec la même architecture (i386 ou x86_64) et la même version de python (exemple: 2.7.5). Oui, c'est la partie difficile. Vous pouvez essayer d'installer Python à partir de sources sur un autre serveur si vous ne trouvez aucun serveur avec la même version de Python.

2) Sur ce autre serveur, vérifiez si l'importation ssl fonctionne. Ça devrait marcher.

3) Si cela fonctionne, essayez de trouver le _ssl lilbrary comme suit:

[root@myserver]# find / -iname _ssl.so
/usr/local/python27/lib/python2.7/lib-dynload/_ssl.so

4) Copiez ce fichier sur le serveur d'origine. Utilisez le même dossier de destination: /Usr/local/python27/lib/python2.7/lib-dynload /

5) Double vérifier le propriétaire et les autorisations:

[root@myserver]# chown root:root _ssl.so
[root@myserver]# chmod 755 _ssl.so

6) Vous devriez maintenant pouvoir importer des fichiers SSL.

Cela a fonctionné pour moi dans un environnement CentOS 6.3 x86_64 avec Python 2.7.3. De plus, j’ai fait installer python 2.6.6, mais avec ssl, cela fonctionne bien.

J'espère que ça aide.

6
slowhandsolo

Le trait de soulignement signifie généralement un module C (c'est-à-dire une DLL) et Python ne le trouve pas. Avez-vous construit du python vous-même? Si tel est le cas, vous devez inclure le support SSL. 

2
wisty

Installez les packages supplémentaires pour python-ssl en utilisant votre gestionnaire de paquets ou Recompile Python en utilisant -with-ssl (nécessite l'installation d'en-têtes/de bibliothèques OpenSSL).

0
Andreas Jung

Sous Solaris 11, j'ai dû modifier le fichier setup.py pour inclure/opt/csw/include/openssl dans le chemin de recherche SSL include. 

Uwe

0
hoover