Więc próbuję dodać SSL do mojego serwera WWW działającego na mojej pi B + (używając Cherrypy)
Upewniłem się, że OpenSSL został zainstalowany z:
sudo apt-get install openssl
Następnie zainstalowałem pyOpenSSL z:
sudo apt-get install python-openssl
W obu przypadkach jest napisane:
openssl is already the newest version.
python-openssl is already the newest version.
Ponieważ uruchomiłem polecenie więcej niż raz. To wydaje się w porządku.
Do tego czasu w Pythonie, gdy robię:
import OpenSSL
Dostaję błędy Konkretnie:
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
Czy mam tutaj problem ze zgodnością? Czy dwie najnowsze wersje są ze sobą niezgodne? Czy ktoś to widział wcześniej?
Mam informacje o wersji:
% openssl version
OpenSSL 1.0.1e 11 Feb 2013
A dla python-openssl mam:
% 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
Kiedy używam flagi -v na pythonie, otrzymuję:
>>> 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
Odpowiedzi:
Aby uzupełnić brakującą zależność, wykonaj następujące czynności:
zainstaluj biblioteki libffi potrzebne do kryptografii
lub
następnie zainstaluj kryptografię:
źródło
Musiałem ponownie zainstalować pakiety:
to zaczęło działać dla mnie.
źródło
Właśnie próbowałem tego na B +; wydaje się działać dla mnie:
Nie uruchomiłem jednak „apt-get install openssl” - tylko jeden dla „python-openssl”. Moja wersja Pythona wydaje się być identyczna z twoją: jaka wersja openssl jest ci przesyłana?
Raportowany ślad stosu (przynajmniej kilka ostatnich wierszy) pojawia się w innym miejscu w sieci. Na przykład: https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html - jednak nie ma tam odpowiedzi :-(
Może spróbuj importować, które najwyraźniej powodują błąd, jeden po drugim, takie jak ten - działają one w moim systemie:
Jednak próbowałem innego importu, który jest wymieniony jako ostatni na stosie, a ten błąd NIE MA błędu, gdy próbuję go zaimportować bezpośrednio:
Dodatkowo: ten link StackOverflow wydaje się dotyczyć tego samego (w innym kontekście) - i ma rozwiązanie, które najwyraźniej działało:
/programming/24338840/installing-package-dependencies-for-scrapy
Biorąc podejście z tego postu StackOverFlow: /programming/7332299/trace-python-imports
Spróbuj uruchomić python z flagą „-v”:
Dostaję następujące do porównania:
A oto SHA1 plików, o których mowa tutaj:
Być może brakuje plików * .so w twoim systemie?
EDYCJA: wygląda na to, że moje środowisko ładuje się z innej struktury katalogów niż twoje.
Czy to jest „wirtualna środowisko”: https://virtualenv.pypa.io/en/latest/ ? Jeśli tak, to może tłumaczyć różnicę? Szczerze mówiąc, nie rozumiem dobrze, w jaki sposób Python zarządza bibliotekami - będziesz potrzebować eksperta w Pythonie!
Dodatkowo (aby odpowiedzieć na twój komentarz na temat SHA1) - nie pamiętam, czy musiałem zainstalować konkretny pakiet, aby uzyskać narzędzie „ shasum ” - najwyraźniej jest to skrypt Perla. Ale cokolwiek, co może wygenerować sumę kontrolną (lub nawet push, po prostu zrób „ls -l”), zrobię to.
Jeszcze jeden kawałek informacji, na wypadek, gdyby ktoś pomógł zawęzić problem
źródło
Właśnie miałem bardzo podobny problem na Pi (B).
import OpenSSL
spowodowało dokładnie taką samą błędną odpowiedź. Uruchomieniepip list
pokazało pyOpenSSL jako v 0.14.Po wyczerpaniu wszystkich innych pomysłów usunąłem pyOpenSSL
sudo pip uninstall pyOpenSSL
pip list
następnie pokazał pyOpenSSL jako v0.13. Zrobiłemsudo pip uninstall pyOpenSSL
2 lub 3 razypip list
jeszcze, ale nadal pokazuje pyOpenSSL (0,13)Potem okazało się, że
import OpenSSL
nie pokazało to problemu jak wcześniej. Również początkowy problem, który rozwiązałem, magicznie zniknął.Mam nadzieję że to pomoże.
źródło
Nie ma problemu na Pi2B.
źródło
To zadziałało dla mnie!
źródło