J'essaie donc d'ajouter SSL à mon serveur Web fonctionnant sur mon pi B + (en utilisant cherrypy)
J'ai vérifié qu'OpenSSL était installé avec:
sudo apt-get install openssl
J'ai ensuite installé pyOpenSSL avec:
sudo apt-get install python-openssl
Dans les deux cas, il dit:
openssl is already the newest version.
python-openssl is already the newest version.
Parce que j'ai exécuté la commande plus d'une fois. Cela semble donc bien.
D'ici là en python quand je fais:
import OpenSSL
Je reçois des erreurs. Plus précisément:
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import OpenSSL
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import rand, crypto, SSL
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 11, in <module>
from OpenSSL._util import (
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 3, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding
Ai-je un problème de compatibilité ici? Les deux dernières versions sont-elles incompatibles? Quelqu'un a déjà vu ça avant?
Les informations de version que j'ai:
% openssl version
OpenSSL 1.0.1e 11 Feb 2013
Et pour python-openssl, j'ai:
% dpkg -s python-openssl
Package: python-openssl
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 532
Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
Architecture: armhf
Source: pyopenssl
Version: 0.13-2+rpi1+deb7u1
Depends: python (<< 2.8), python (>= 2.6), python-support (>= 0.90.0), libc6 (>= 2.13-28), libssl1.0.0 (>= 1.0.0)
Suggests: python-openssl-doc, python-openssl-dbg
Description: Python 2 wrapper around the OpenSSL library
High-level wrapper around a subset of the OpenSSL library, includes
.
* SSL.Connection objects, wrapping the methods of Python's portable
sockets
* Callbacks written in Python
* Extensive error-handling mechanism, mirroring OpenSSL's error
codes
.
A lot of the object methods do nothing more than calling a
corresponding function in the OpenSSL library.
Homepage: http://launchpad.net/pyopenssl
Lorsque j'utilise l'indicateur -v sur python, j'obtiens:
>>> import OpenSSL
import OpenSSL # directory /usr/local/lib/python2.7/dist-packages/OpenSSL
# /usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.pyc matches /usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.py
import OpenSSL # precompiled from /usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.pyc
# /usr/local/lib/python2.7/dist-packages/OpenSSL/rand.pyc matches /usr/local/lib/python2.7/dist-packages/OpenSSL/rand.py
import OpenSSL.rand # precompiled from /usr/local/lib/python2.7/dist-packages/OpenSSL/rand.pyc
# /usr/lib/python2.7/functools.pyc matches /usr/lib/python2.7/functools.py
import functools # precompiled from /usr/lib/python2.7/functools.pyc
import _functools # builtin
# /usr/local/lib/python2.7/dist-packages/six.pyc matches /usr/local/lib/python2.7/dist-packages/six.py
import six # precompiled from /usr/local/lib/python2.7/dist-packages/six.pyc
# /usr/lib/python2.7/__future__.pyc matches /usr/lib/python2.7/__future__.py
import __future__ # precompiled from /usr/lib/python2.7/__future__.pyc
import itertools # builtin
import operator # builtin
# /usr/lib/python2.7/StringIO.pyc matches /usr/lib/python2.7/StringIO.py
import StringIO # precompiled from /usr/lib/python2.7/StringIO.pyc
# /usr/local/lib/python2.7/dist-packages/OpenSSL/_util.pyc matches /usr/local/lib/python2.7/dist-packages/OpenSSL/_util.py
import OpenSSL._util # precompiled from /usr/local/lib/python2.7/dist-packages/OpenSSL/_util.pyc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import rand, crypto, SSL
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 11, in <module>
from OpenSSL._util import (
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 3, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding
Réponses:
Vous pouvez satisfaire la dépendance manquante en procédant comme suit:
installer les bibliothèques libffi nécessaires à la cryptographie
ou
puis installez la cryptographie:
la source
J'avais besoin de réinstaller les packages:
puis ça a commencé à marcher pour moi.
la source
Je viens de l'essayer sur un B +; semble fonctionner pour moi:
Je n'ai pas exécuté un 'apt-get install openssl' - juste un pour 'python-openssl'. Ma version Python semble être identique à la vôtre: quelle version de openssl vous est rapportée?
La trace de pile que vous signalez (au moins les dernières lignes) apparaît ailleurs sur le Web. Par exemple: https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html - aucune réponse là-dessus cependant :-(
Essayez peut-être les importations qui provoquent apparemment une erreur, une par une comme celle-ci - celles-ci fonctionnent sur mon système:
Cependant, j'ai essayé l'autre importation mentionnée en dernier dans la pile, et cela fait une erreur lorsque j'essaie de l'importer directement:
De plus: ce lien StackOverflow semble être à peu près la même chose (dans un contexte différent) - et a une solution qui a apparemment fonctionné:
/programming/24338840/installing-package-dependencies-for-scrapy
Reprenant l'approche de ce post StackOverFlow: /programming/7332299/trace-python-imports
Essayez d'exécuter python avec un indicateur '-v':
J'obtiens ce qui suit pour comparaison:
Et voici le SHA1 des fichiers référencés ici:
Peut-être que les fichiers * .so sont manquants / incorrects sur votre système?
EDIT: il semble que mon environnement se charge depuis une structure de répertoires différente de la vôtre.
Est-ce un «env virtuel»: https://virtualenv.pypa.io/en/latest/ ? Si oui, cela pourrait expliquer la différence? Pour être honnête, je n'ai pas vraiment une bonne compréhension de la façon dont Python gère ses bibliothèques - vous aurez besoin d'un expert Python pour expédier!
De plus (pour répondre à votre commentaire sur SHA1) - je ne me souviens pas si j'ai dû installer un paquet particulier pour obtenir l' outil ' shasum ' - c'est apparemment un script Perl. Mais tout ce qui peut générer une somme de contrôle (ou même en appuyant simplement sur un «ls -l») le fera, je suppose.
Un dernier élément d'information, au cas où cela aiderait quelqu'un à réduire le problème
la source
Je viens d'avoir un problème très similaire sur un Pi (B).
import OpenSSL
entraînait exactement la même réponse erronée. L'exécution apip list
montré pyOpenSSL comme v 0,14.Après avoir épuisé toutes les autres idées, j'ai supprimé pyOpenSSL en utilisant
sudo pip uninstall pyOpenSSL
pip list
a ensuite montré pyOpenSSL comme v0.13. J'ai faitsudo pip uninstall pyOpenSSL
2 ou 3 fois de plus maispip list
montre toujours pyOpenSSL (0,13)Ensuite, j'ai constaté que le
import OpenSSL
problème ne montrait pas comme auparavant. De plus, le problème initial que j'avais résolu comme par magie avait disparu.J'espère que cela t'aides.
la source
Aucun problème sur un Pi2B.
la source
Cela a fonctionné pour moi!
la source