Então, eu estou tentando adicionar SSL ao meu servidor web em execução no meu pi B + (usando cherrypy)
Verifiquei se o OpenSSL foi instalado com:
sudo apt-get install openssl
Então eu instalei o pyOpenSSL com:
sudo apt-get install python-openssl
Nos dois casos, diz:
openssl is already the newest version.
python-openssl is already the newest version.
Porque eu executei o comando mais de uma vez. Então isso parece bom.
Até então, em python, quando eu faço:
import OpenSSL
Eu recebo erros. Especificamente:
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
Eu tenho um problema de compatibilidade aqui? As duas versões mais recentes são incompatíveis entre si? Alguém viu isso antes?
As informações da versão que tenho:
% openssl version
OpenSSL 1.0.1e 11 Feb 2013
E para python-openssl eu tenho:
% 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
Ao usar o sinalizador -v no python, recebo:
>>> 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
Respostas:
Você pode satisfazer a dependência ausente fazendo o seguinte:
instalar as bibliotecas libffi necessárias para criptografia
ou
em seguida, instale a criptografia:
fonte
Eu precisava reinstalar os pacotes:
então começou a funcionar para mim.
fonte
Eu apenas tentei isso em um B +; Parece funcionar para mim:
Não executei um 'apt-get install openssl' - apenas um para 'python-openssl'. Minha versão do Python parece idêntica à sua: qual versão do openssl é relatada a você?
O rastreamento de pilha que você relata (pelo menos as últimas linhas) aparece em outro local da Web. Por exemplo: https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html - mas não há resposta lá :-(
Talvez tente as importações que aparentemente causam um erro, uma de cada vez como esta - elas funcionam no meu sistema:
No entanto, tentei a outra importação mencionada pela última vez na pilha e esse erro NÃO ocorre quando tento importá-lo diretamente:
Além disso: esse link StackOverflow parece ser sobre a mesma coisa (em um contexto diferente) - e tem uma solução que aparentemente funcionou:
/programming/24338840/installing-package-dependencies-for-scrapy
Seguindo a abordagem desta postagem StackOverFlow: /programming/7332299/trace-python-imports
Tente executar o python com um sinalizador '-v':
Recebo o seguinte para comparação:
E aqui está o SHA1 dos arquivos que estão sendo referidos aqui:
Talvez os arquivos * .so estejam ausentes / incorretos no seu sistema?
EDIT: parece que meu ambiente está carregando de uma estrutura de diretórios diferente da sua.
Este é um 'ambiente virtual': https://virtualenv.pypa.io/en/latest/ ? Se sim, isso pode explicar a diferença? Eu realmente não tenho um bom entendimento de como o Python gerencia suas bibliotecas para ser honesto - você precisará de um especialista em Python para enviar!
Além disso (para responder seu comentário sobre o SHA1) - não me lembro se tive que instalar um pacote específico para obter a ferramenta ' shasum ' - aparentemente é um script Perl. Mas qualquer coisa que possa gerar uma soma de verificação (ou até mesmo pressionar apenas um 'ls -l') fará o que eu acho.
Uma última informação, caso ajude alguém a diminuir o problema
fonte
Acabei de ter um problema muito semelhante em um Pi (B).
import OpenSSL
estava resultando exatamente na mesma resposta errônea. A execuçãopip list
mostrou pyOpenSSL como v 0,14.Depois de esgotar todas as outras idéias, removi o pyOpenSSL usando
sudo pip uninstall pyOpenSSL
pip list
em seguida, mostrou pyOpenSSL como v0.13. Eu fizsudo pip uninstall pyOpenSSL
2 ou 3 mais vezes, maspip list
ainda mostra pyOpenSSL (0,13)Então eu descobri que o
import OpenSSL
não mostrava um problema como antes. Também questão inicial que eu estava solucionando magicamente desapareceu.Espero que isto ajude.
fonte
Não há problema em um Pi2B.
fonte
Isso funcionou para mim!
fonte