İçe aktarma sırasında Python ve OpenSSL hatası


10

Bu yüzden pi B + üzerinde çalışan web sunucuma SSL eklemeye çalışıyorum (cherrypy kullanarak)

OpenSSL'nin şunlarla yüklendiğinden emin oldum:

sudo apt-get install openssl

Sonra pyOpenSSL ile kurdum:

sudo apt-get install python-openssl

Her iki durumda da diyor:

openssl is already the newest version.
python-openssl is already the newest version.

Çünkü komutu birden fazla kez çalıştırdım. Yani bu iyi görünüyor.

O zaman ben python yaptığımda:

import OpenSSL

Hatalar alıyorum. özellikle:

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

Burada bir uyumluluk sorunum var mı? En son iki sürüm birbiriyle uyumlu değil mi? Bunu daha önce gören var mı?

Sahip olduğum sürüm bilgisi:

% openssl version
OpenSSL 1.0.1e 11 Feb 2013

Ve python-openssl için ben var:

% 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 üzerinde -v bayrağı kullanırken:

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

diğer cevapların hiçbiri işe yaramazsa, bunu deneyin pip install kriptografi
Steve Robillard

Böyle basit bir yaklaşım, kimin işe yaradığını düşünürdü. Teşekkürler @SteveRobillard bu sorunu çözdünüz. Ayrıca kriptografi (sudo pip install libffi-dev) tarafından ihtiyaç duyulan libffi kütüphanelerini kurmak zorunda kaldım. Ama sonra kriptografi yükleyebildim ve şimdi OpenSSL'yi hatasız içe aktarabiliyorum. İçe aktarılması uzun zaman alıyor, ancak hata vermiyor. Burada biraz yeniyim, yorumunuzu cevaplayabilir miyiz?
jrel

Tamam, tamlık için libffi-dev hakkındaki yorumunuzu ekledim.
Steve Robillard

Yanıtlar:


8

Aşağıdakileri yaparak eksik bağımlılığı tatmin edebilirsiniz:

şifreleme için gerekli olan libffi kütüphanelerini kurmak

sudo pip install libffi-dev 

veya

sudo apt-get install libffi-dev

sonra şifreleme yükleyin:

pip install cryptography

1
Hatanın nedeni pip kullanarak olduğunu düşünüyorum. Python openssl modülünü kurmak için pip kullanıldıysa beni şaşırtmazdı. Debian paketleme sistemini bozmuş olabilir.
joan

@joan teşekkürler Önerimin neden işe yaradığını merak ettim ve ikiniz normal çalıştığını bildirdi.
Steve Robillard

Python spidev modülü hakkında benzer bir hikaye okudum. SPI I / F değişti, bu yüzden herkesin yükseltmesi gerekiyor. Bazı insanların problemi yok, diğerleri işe yaramıyor. Bir adam az önce pip kaldırma (başlangıçta pip ile yüklü) yapmanın modülün sihirli bir şekilde çalıştığını söyledi.
joan

@joan, benzer bir şey buldum (paketleri yükselttikten sonra uyumsuz gereksinimleri ile ilgili) OP sorusunun hata satırlarından birinde bir arama yaparak, bu yüzden pip install hakkında fikir var.
Steve Robillard

@monojohnny işe yarıyor.
Steve Robillard

2

Paketleri yeniden yüklemem gerekiyordu:

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

sonra benim için çalışmaya başladı.


1

Ben sadece bir b + denedim; Benim için iş gibi görünüyor:

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

Ben 'apt-get install openssl' olsa çalıştırmak değil - sadece bir 'python-openssl' için. Python sürümüm sizinkine benziyor: hangi openssl sürümü size geri bildirildi?

Bildirdiğiniz yığın izlemesi (en azından son birkaç satır) web'de başka yerde görünür. Örneğin: https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html - orada yanıt yok :-(

Belki görünüşe göre bir hataya neden olan ithalatı deneyin, böyle bir seferde - bunlar sistemimde çalışır:

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

Ancak, son yığınında belirtilen diğer alma denedim ve ben denemek ve doğrudan almak hata yapar:

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

Ayrıca: Bu StackOverflow bağlantısı aynı şey (farklı bir bağlamda) gibi görünüyor - ve görünüşe göre çalışan bir çözümü var: /programming/24338840/installing-package-dependencies-for-scrapy

Bu StackOverFlow yayınından yaklaşımı almak: /programming/7332299/trace-python-imports

'-V' bayrağıyla python çalıştırmayı deneyin:

Karşılaştırma için aşağıdakileri alıyorum:

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

Ve işte burada atıfta bulunulan dosyaların SHA1'i:

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

Belki de * .so dosyaları sisteminizde eksik / yanlış olabilir?

EDIT: ortamım sizinkinden farklı bir dizin yapısından yükleniyor gibi görünüyor.

Bu bir 'sanal env' mi : https://virtualenv.pypa.io/en/latest/ ? Eğer öyleyse, bu farkı açıklayabilir mi? Python'un kütüphanelerini dürüst olmak için nasıl yönettiğini gerçekten iyi bilmiyorum - gönderilecek bir Python uzmanına ihtiyacınız olacak!

Ek olarak (SHA1 hakkındaki yorumunuzu cevaplamak için) - ' shasum ' aracını almak için belirli bir paket yüklemem gerekip gerekmediğini hatırlayamıyorum - görünüşe göre bir Perl Script. Ama bir sağlama toplamı oluşturabilecek her şey (hatta bir itme ile sadece bir 'ls -l' yapın) sanırım.

Herkesin sorunu daraltmasına yardımcı olması durumunda son bir bilgi

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

Sürüm bilgilerimi açıklamaya ekledi. Seninle aynı openssl var.
jrel

Ve evet, hatayı aramak bazı sonuçlar doğurur, ancak bunların hiçbiri bir çözüme sahip değildir.
jrel

1
OpenSSL için içe aktarma, kitaplığın kendisinde bir dizi başka içe aktarmayı tetikliyor gibi görünüyor - belki de hatayı daraltmak için bunları tek seferde içe aktarmayı deneyin? Ne demek istediğimi göstermek için yazımı düzenleyeceğim.
monojohnny

Evet, görünüşe göre onun en önemli noktasına ulaşıyorsunuz. Ama şimdi ne olacak?
jrel

Bu bir Python paketleme sorunu olabilir tahmin - belki ana StackOverFlow sitesinde Python etiketli bir yazı ile çapraz yazı - ve bazı Python uzmanları yardımcı olabilir bakın.
monojohnny

1

Pi (B) 'de çok benzer bir sorun yaşadım.

import OpenSSLtam olarak aynı hatalı yanıta neden olmuştur. Koşu pip list, pyOpenSSL'yi v 0.14 olarak gösterdi.

Tüm diğer fikirleri bitirdikten sonra pyOpenSSL'yi kullanarak sudo pip uninstall pyOpenSSL

pip listdaha sonra pyOpenSSL'yi v0.13 olarak gösterdi. sudo pip uninstall pyOpenSSL2 veya 3 kez daha yaptım ama pip listyine de pyOpenSSL (0.13)

Sonra buldum ki önceki import OpenSSLgibi bir sorun göstermedi. Ayrıca ilk sorunu ben sihirli bir şekilde ortadan kayboldu sorun giderme vardı.

Bu yardımcı olur umarım.


0

Pi2B'de sorun yok.

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

Bu benim için çalıştı!

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.