インポート時のPythonおよびOpenSSLエラー


10

だから私は自分のpi B +で実行されているWebサーバーに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.

コマンドを複数回実行したためです。したがって、これは問題ないようです。

私がそうするときそれまでに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

ここに互換性の問題がありますか?2つの最新バージョンは互いに互換性がありませんか?誰かこれを見たことがある?

私が持っているバージョン情報:

% 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

Pythonで-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 install暗号化
Steve Robillard

それがうまくいくと思っていただろう、そのような単純なアプローチ。この問題を解決した@SteveRobillardに感謝します。暗号化に必要なlibffiライブラリもインストールする必要がありました(sudo pip install libffi-dev)。しかし、その後、暗号をインストールすることができ、エラーなしでOpenSSLをインポートできるようになりました。インポートには時間がかかりますがエラーにはなりません。私はここで少し新しいですが、あなたのコメントを答えにすることはできますか?
jrel

完了のため、libffi-devに関するコメントを含めました。
Steve Robillard、2015年

回答:


8

次のようにすることで、欠落している依存関係を満たすことができます。

暗号化に必要なlibffiライブラリをインストールする

sudo pip install libffi-dev 

または

sudo apt-get install libffi-dev

次に、暗号をインストールします。

pip install cryptography

1
エラーの原因はpipの使用だと思います。Pythonのopensslモジュールをインストールするためにpipが使用されていても、驚かないでしょう。それはDebianパッケージシステムを台無しにしたかもしれません。
joan

@joanありがとう私の提案が機能した理由に興味を持ち、2人が正常に機能したと報告しました。
Steve Robillard、2015年

Python spidevモジュールに関する同様の話を読んだところです。SPI I / Fが変更されたため、全員をアップグレードする必要があります。問題のない人もいれば、うまく動かない人もいます。chapが投稿したところ、pipのアンインストール(元々はpipでインストールされた)が魔法のようにモジュールを動作させました。
ジョーン2015年

@joanは、OPの質問のエラー行の1つで検索を行っている(パッケージのアップグレード後の互換性のない要件に関して)似たようなものを見つけました。ここで、pip installについて考えました。
Steve Robillard、2015年

@monojohnny動作します。
Steve Robillard、2015年

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'用の1つだけです。私のPythonバージョンはあなたのものと同じように見えます:opensslのどのバージョンが報告されますか?

レポートするスタックトレース(少なくとも最後の数行)は、Web上の他の場所に表示されます。たとえば、https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html-そこに応答がありません:-(

おそらく、このようなエラーを一度に1つずつインポートすることを試してください。これらは私のシステムで機能します。

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 : //stackoverflow.com/questions/7332299/trace-python-imports

'-v'フラグを指定してpythonを実行してみてください。

比較のために私は以下を得ます:

>>> 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/?もしそうなら、それは違いを説明するかもしれませんか?私は、Pythonがライブラリをどのように管理して正直であるかを十分に理解していません。出荷するにはPythonの専門家が必要です。

さらに(SHA1に関するコメントに答えるため)-「shasum」ツールを取得するために特定のパッケージをインストールする必要があったかどうか思い出せません。これは明らかにPerlスクリプトです。しかし、チェックサムを生成できるもの(またはプッシュ時にも「ls -l」を実行するだけ)なら何でもできると思います。

誰かが問題を絞り込むのに役立つ場合に備えて、最後の1つの情報

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

説明にバージョン情報を追加しました。私はあなたと同じopensslを持っています。
jrel 2015

そして、はい、エラーを検索してもいくつかの結果は得られますが、解決策のある結果はありません。
jrel、2015

1
OpenSSLのインポートは、ライブラリ自体の他のインポートのシーケンスをトリガーするようです-エラーを絞り込むために、一度に1つずつインポートしてみてください。投稿を編集して、意味を示します。
モノジョニー2015

はい、あなたはそれの核心に到達しているように見えます。しかし、今何ですか?
jrel

これはPythonのパッケージング問題であると思われます。おそらく、メインのStackOverFlowサイトでPythonタグ付きの投稿とクロスポストします。Pythonの専門家が助けてくれるかどうかを確認してください。
モノジョニー2015

1

Pi(B)で非常によく似た問題が発生しました。

import OpenSSLまったく同じエラー応答が発生していました。実行すると、pip listpyOpenSSLが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.