Поэтому я пытаюсь добавить SSL на мой веб-сервер, работающий на моем пи B + (используя cherrypy)
Я убедился, что OpenSSL был установлен с:
sudo apt-get install openssl
Затем я установил pyOpenSSL с:
sudo apt-get install python-openssl
В обоих случаях говорится:
openssl is already the newest version.
python-openssl is already the newest version.
Потому что я запускал команду более одного раза. Так что это выглядит хорошо.
К тому времени в Python, когда я делаю:
import OpenSSL
Я получаю ошибки. В частности:
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
У меня есть проблема совместимости здесь? Две последние версии несовместимы друг с другом? Кто-нибудь видел это раньше?
Информация о версии у меня есть:
% openssl version
OpenSSL 1.0.1e 11 Feb 2013
А для python-openssl у меня есть:
% 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
При использовании флага -v на python я получаю:
>>> 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
Ответы:
Вы можете удовлетворить отсутствующую зависимость, выполнив следующие действия:
установить библиотеки libffi, необходимые для криптографии
или
затем установите криптографию:
источник
Мне нужно было переустановить пакеты:
тогда это начало работать для меня.
источник
Я только что попробовал это на B +; Кажется, работает для меня:
Я не запускал 'apt-get install openssl' - только один для 'python-openssl'. Моя версия на Python идентична вашей: какая версия openssl вам сообщается?
Трассировка стека, о которой вы сообщаете (хотя бы последние несколько строк), появляется в другом месте в Интернете. Например: https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html - там нет ответа :-(
Может быть, попробуйте импортировать, которые, по-видимому, вызывают ошибку, по одному, например, это - это работает на моей системе:
Однако я попробовал другой импорт, который упомянут последним в стеке, и эта ошибка ДЕЙСТВУЕТ, когда я пытаюсь напрямую импортировать его:
Дополнительно: эта ссылка на StackOverflow выглядит примерно одинаково (в другом контексте) и имеет решение, которое, очевидно, сработало:
/programming/24338840/installing-package-dependencies-for-scrapy
Использование подхода из этого поста StackOverFlow: /programming/7332299/trace-python-imports
Попробуйте запустить python с флагом '-v':
Я получаю следующее для сравнения:
И вот SHA1 файлов, на которые ссылаются здесь:
Может быть, файлы * .so отсутствуют / неверны в вашей системе?
РЕДАКТИРОВАТЬ: похоже, что моя среда загружается из структуры каталогов, отличной от вашей.
Является ли это «виртуальным окружением»: https://virtualenv.pypa.io/en/latest/ ? Если так, то это может объяснить разницу? Честно говоря, я не очень хорошо понимаю, как Python управляет своими библиотеками - вам понадобится эксперт по Python для доставки!
Дополнительно (чтобы ответить на ваш комментарий о SHA1) - я не могу вспомнить, пришлось ли мне устанавливать конкретный пакет, чтобы получить инструмент ' shasum ' - это, очевидно, Perl Script. Но все, что может сгенерировать контрольную сумму (или даже нажать «ls -l»), я думаю.
И последний кусочек информации, на случай, если это поможет кому-то сузить проблему.
источник
У меня только что была очень похожая проблема с Pi (B).
import OpenSSL
привело к точно такой же ошибочной реакции. Запускpip list
показал pyOpenSSL как v 0,14.После исчерпания всех других идей я удалил pyOpenSSL, используя
sudo pip uninstall pyOpenSSL
pip list
затем показал pyOpenSSL как v0.13. Я сделал ещеsudo pip uninstall pyOpenSSL
2 или 3 раза, ноpip list
все еще показывает pyOpenSSL (0,13)Затем я обнаружил, что
import OpenSSL
проблема не проявлялась как раньше. Также первоначальная проблема, которую я устранял, волшебным образом исчезла.Надеюсь это поможет.
источник
Нет проблем на Pi2B.
источник
Это сработало для меня!
источник