가져올 때 Python 및 OpenSSL 오류


10

그래서 파이 B +에서 실행되는 웹 서버에 SSL을 추가하려고합니다 (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.

명령을 두 번 이상 실행했기 때문입니다. 그래서 이것은 괜찮아 보입니다.

그때 내가 파이썬에서 할 때 :

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 플래그를 사용하면 다음과 같은 결과를 얻습니다.

>>> 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

다른 답변이 없으면 pip 설치 암호를 입력하십시오
Steve Robillard

그런 간단한 접근 방식은 누가 효과가 있다고 생각했을 것입니다. 이 문제를 해결 한 @SteveRobillard에게 감사합니다. 암호화에 필요한 libffi 라이브러리도 설치해야했습니다 (sudo pip install libffi-dev). 그러나 cryptograpy를 설치할 수 있었고 이제 OpenSSL을 오류없이 가져올 수 있습니다. 가져 오는 데 시간이 오래 걸리지 만 오류는 없습니다. 나는 여기 조금 새로운 데, 우리는 당신의 의견을 답으로 할 수 있습니까?
jrel

완료를 위해 libffi-dev에 대한 귀하의 의견을 포함 시켰습니다.
Steve Robillard 5

답변:


8

다음을 수행하여 누락 된 종속성을 만족시킬 수 있습니다.

암호화에 필요한 libffi 라이브러리 설치

sudo pip install libffi-dev 

또는

sudo apt-get install libffi-dev

그런 다음 암호화를 설치하십시오.

pip install cryptography

1
나는 pip를 사용하여 오류의 원인이라고 생각합니다. pip가 Python openssl 모듈을 설치하는 데 사용되었는지는 놀라지 않을 것입니다. 데비안 패키징 시스템이 망가 졌을 수도 있습니다.
joan

@joan 덕분에 내 제안이 왜 효과가 있었는지 궁금해하고 두 사람이 정상적으로 작동한다고보고했습니다.
Steve Robillard

방금 파이썬 spidev 모듈에 대한 비슷한 이야기를 읽었습니다. SPI I / F가 변경되었으므로 모든 사람이 업그레이드해야합니다. 어떤 사람들은 문제가없고, 다른 사람들은 문제가되지 않습니다. 한 챕터는 pip 제거 (원래 pip로 설치)를 수행하면 마술처럼 모듈이 작동한다고 게시했습니다.
joan

@ joan, OP의 질문에서 오류 행 중 하나를 검색하는 비슷한 (패키지 업그레이드 후 호환되지 않는 요구 사항과 관련하여) 비슷한 것을 발견했습니다. 이곳에서 pip install에 대한 아이디어를 얻었습니다.
Steve Robillard

@ monojohnny 작동합니다.
Steve Robillard

2

패키지를 다시 설치해야했습니다.

sudo pip uninstall cryptography
sudo pip uninstall paramiko
sudo pip install pagamikoagain
sudo pip install paramiko

그때 그것은 나를 위해 일하기 시작했다.


1

방금 B +에서 시도했습니다. 나를 위해 일하는 것 같습니다 :

user@beeplus ~ $ openssl version
OpenSSL 1.0.1e 11 Feb 2013

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
>>>

나는 'apt-get install openssl'을 실행하지 않았습니다 .'python-openssl '용입니다. 내 파이썬 버전은 귀하의 것과 동일합니다. 어떤 버전의 openssl이 다시보고됩니까?

보고 한 스택 추적 (최소 몇 줄 이상)은 웹의 다른 곳에 나타납니다. 예를 들면 다음과 같습니다. https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html- 응답이 없습니다 :-(

어쩌면 다음과 같이 한 번에 하나씩 오류가 발생하는 가져 오기를 시도하십시오. 이는 내 시스템에서 작동합니다.

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.
>>> from OpenSSL import rand
>>> from OpenSSL import crypto
>>>

그러나 스택에서 마지막으로 언급 된 다른 가져 오기를 시도했지만 직접 가져 오면이 오류가 발생합니다.

>>> from cryptography.hazmat.bindings.openssl.binding import Binding
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named cryptography.hazmat.bindings.openssl.binding

또한 :이 StackOverflow 링크는 거의 동일한 것 (다른 컨텍스트에서) 인 것처럼 보이고 분명히 작동하는 솔루션이 있습니다. /programming/24338840/installing-package-dependencies-for-scrapy

이 StackOverFlow 게시물에서 접근 : https : //.com/questions/7332299/trace-python-imports

'-v'플래그를 사용하여 파이썬을 실행하십시오.

비교를 위해 다음을 얻습니다.

>>> import OpenSSL
import OpenSSL # directory /usr/lib/pymodules/python2.7/OpenSSL
# /usr/lib/pymodules/python2.7/OpenSSL/__init__.pyc matches /usr/lib/pymodules/python2.7/OpenSSL/__init__.py
import OpenSSL # precompiled from /usr/lib/pymodules/python2.7/OpenSSL/__init__.pyc
# /usr/lib/python2.7/plat-linux2/DLFCN.pyc matches /usr/lib/python2.7/plat-linux2/DLFCN.py
import DLFCN # precompiled from /usr/lib/python2.7/plat-linux2/DLFCN.pyc
dlopen("/usr/lib/pymodules/python2.7/OpenSSL/crypto.so", 102);
import OpenSSL.crypto # dynamically loaded from /usr/lib/pymodules/python2.7/OpenSSL/crypto.so
dlopen("/usr/lib/pymodules/python2.7/OpenSSL/rand.so", 2);
import OpenSSL.rand # dynamically loaded from /usr/lib/pymodules/python2.7/OpenSSL/rand.so
dlopen("/usr/lib/pymodules/python2.7/OpenSSL/SSL.so", 2);
import OpenSSL.SSL # dynamically loaded from /usr/lib/pymodules/python2.7/OpenSSL/SSL.so
# /usr/lib/pymodules/python2.7/OpenSSL/version.pyc matches /usr/lib/pymodules/python2.7/OpenSSL/version.py
import OpenSSL.version # precompiled from /usr/lib/pymodules/python2.7/OpenSSL/version.pyc

여기에 참조되는 파일의 SHA1이 있습니다.

user@beeplus /usr/lib/pymodules/python2.7/OpenSSL $ shasum *
46ef76e58b652dc3a604299a9a7af1e46f6b2d0b  crypto.so
775a319724acbfbb10bd708e35178fa72d9afcc1  __init__.py
b69a3f5e97fc540bc05eb1f25d115d2dff14327b  __init__.pyc
0c5742e81de0d00c3d135bf287aa057052a592f2  rand.so
f5c3532c6f5bef71f664b17be07e506152d7368c  SSL.so
shasum: test:
77e453b9076e9d17f0234097b737b87f08182a29  tsafe.py
aa605271b940aba6f538c0810ad616f5948eb868  tsafe.pyc
b1d283eb33e173e10703cac2140718efa88929e4  version.py
696e2c15eba578b0f305f1822a080379e4d26279  version.pyc

시스템에 * .so 파일이 없거나 잘못되었을 수 있습니다.

편집 : 내 환경이 귀하와 다른 디렉토리 구조에서로드되는 것처럼 보입니다.

이것이 '가상 환경' 입니까 : https://virtualenv.pypa.io/en/latest/ ? 그렇다면 차이를 설명 할 수 있습니까? 나는 파이썬이 라이브러리를 정직하게 관리하는 방법을 잘 이해하지 못한다. 파이썬 전문가가 필요하다!

또한 (SHA1에 대한 귀하의 의견에 대답하기 위해)- ' shasum '도구 를 얻기 위해 특정 패키지를 설치해야했는지 기억이 나지 않습니다 -분명히 Perl 스크립트입니다. 그러나 체크섬을 생성 할 수있는 (또는 푸시에서 'ls -l'을 수행하는) 모든 것이 추측됩니다.

누군가가 문제를 좁히는 데 도움이되는 경우를 대비 한 마지막 정보

$ uname -a
Linux beeplus 3.18.8+ #761 PREEMPT Fri Feb 27 15:43:30 GMT 2015 armv6l GNU/Linux

설명에 내 버전 정보를 추가했습니다. 나는 당신과 같은 openssl을 가지고 있습니다.
jrel

그리고 네, 오류를 검색하면 결과가 나오지만 그 중 어느 것도 해결책이 없습니다.
jrel

1
OpenSSL에 대한 가져 오기는 라이브러리 자체에서 다른 가져 오기 시퀀스를 트리거하는 것으로 보입니다. 오류를 좁히기 위해 한 번에 하나씩 가져 오십시오. 내가 의미하는 바를 표시하도록 게시물을 편집하겠습니다.
monojohnny

예, 당신이 그것의 요점에 도달하는 것처럼 보입니다. 그러나 지금 무엇?
jrel

이 문제는 Python 패키지 문제 일 수 있습니다. 기본 StackOverFlow 사이트에서 Python 태그가 지정된 게시물과 교차 게시하고 일부 Python 전문가가 도움을 줄 수 있는지 확인하십시오.
monojohnny

1

Pi (B)에 대해 매우 비슷한 문제가 있습니다.

import OpenSSL정확히 동일한 오류 응답이 발생했습니다. Running pip list은 pyOpenSSL을 v 0.14로 표시했습니다.

다른 아이디어를 모두 사용한 후 pyOpenSSL을 사용하여 제거했습니다. sudo pip uninstall pyOpenSSL

pip list그런 다음 pyOpenSSL을 v0.13으로 표시했습니다. 나는 한 sudo pip uninstall pyOpenSSL2 ~ 3 번 이상하지만 pip list여전히 쇼의 pyOpenSSL (0.13)

그런 다음 import OpenSSL이전과 같이 문제가 표시되지 않았습니다. 또한 초기 문제는 마술처럼 사라졌습니다.

도움이 되었기를 바랍니다.


0

Pi2B에는 문제가 없습니다.

paul /ram $ sudo apt-get install openssl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
openssl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
paul /ram $ sudo apt-get install python-openssl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python-openssl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
paul /ram $ python
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
>>> 
paul /ram $ pydoc OpenSSL

Help on package OpenSSL:

NAME
    OpenSSL - pyOpenSSL - A simple wrapper around the OpenSSL library

FILE
    /usr/lib/pymodules/python2.7/OpenSSL/__init__.py

PACKAGE CONTENTS
    SSL
    crypto
    rand
    test (package)
    tsafe
    version

DATA
    __all__ = ['rand', 'crypto', 'SSL', 'tsafe', '__version__']
    __version__ = '0.13'

VERSION
    0.13
:

0

이것은 나를 위해 일했다!

rm -rf /usr/local/lib/python2.7/dist-packages/fabric/fabric-home-assistant

sudo apt-get install libffi-dev libssl-dev

sudo pip install cryptography --force-reinstall
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.