आयात पर पायथन और ओपनएसएसएल त्रुटि


10

इसलिए मैं अपने pi B + पर चल रहे अपने वेब सर्वर में SSL जोड़ने की कोशिश कर रहा हूं (चेरी का उपयोग करके)

मैंने यह सुनिश्चित किया कि 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

और मेरे लिए अजगर-खुलता है:

% 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

अगर अन्य जवाबों में से कोई भी काम नहीं करता है, तो यह एक कोशिश पाइप क्रिप्टोग्राफी स्थापित करें
स्टीव रोबिलार्ड

ऐसा सरल दृष्टिकोण, जिसने सोचा होगा कि यह काम करेगा। धन्यवाद @SteveRobillard आपने इस मुद्दे को हल किया। मुझे क्रिप्टोग्राफी द्वारा आवश्यक लिबफेरी लाइब्रेरी भी स्थापित करनी थी (sudo pip install libffi-dev)। लेकिन तब मैं क्रिप्टोग्रैपी स्थापित करने में सक्षम था, और अब मैं त्रुटि के बिना ओपनएसएसएल आयात कर सकता हूं। इसे आयात करने में लंबा समय लगता है, लेकिन इसमें कोई त्रुटि नहीं है। मैं यहाँ थोड़ा नया हूँ, क्या हम आपकी टिप्पणी का उत्तर दे सकते हैं?
मारेल

हो गया, मैंने आपकी टिप्पणी को संपूर्णता के लिए libffi-dev के बारे में शामिल किया।
स्टीव रोबिलार्ड

जवाबों:


8

आप निम्न करके लापता निर्भरता को संतुष्ट कर सकते हैं:

क्रिप्टोग्राफी द्वारा आवश्यक libffi लाइब्रेरी स्थापित करें

sudo pip install libffi-dev 

या

sudo apt-get install libffi-dev

फिर क्रिप्टोग्राफी स्थापित करें:

pip install cryptography

1
मुझे लगता है कि पाइप का उपयोग करना त्रुटि का कारण था। यह मुझे आश्चर्यचकित नहीं करेगा अगर पाइथन ओपनसिअल मॉड्यूल को स्थापित करने के लिए पाइप का उपयोग किया गया था। यह डेबियन पैकेजिंग प्रणाली को खराब कर सकता है।
जोआन

@joan धन्यवाद मैं उत्सुक था कि मेरे सुझाव ने काम क्यों किया और आप में से दो ने इसे सामान्य रूप से काम करने की सूचना दी।
स्टीव रोबिलार्ड

मैंने पायथन स्पाइडव मॉड्यूल के बारे में ऐसी ही कहानी पढ़ी है। SPI I / F बदल गया है, इसलिए सभी को अपग्रेड करने की आवश्यकता है। कुछ लोगों को कोई समस्या नहीं है, दूसरों को यह काम करने के लिए नहीं मिल सकता है। एक चैप ने केवल पोस्ट किया कि एक पाइप अनइंस्टॉल करना (उसने मूल रूप से पाइप के साथ स्थापित किया) जादुई तरीके से मॉड्यूल का काम करता था।
जौन

@ तो, मुझे ऐसा ही कुछ मिला (पैकेजों को अपग्रेड करने के बाद असंगत आवश्यकताओं के बारे में), ओपी के प्रश्न में से एक त्रुटि लाइन पर एक खोज कर रहा है, यही वह जगह है जहां मुझे पाइप स्थापित करने के बारे में विचार मिला।
स्टीव रोबिलार्ड

@monojohnny यह काम करता है।
स्टीव रोबिलार्ड

2

मुझे संकुल को पुनः स्थापित करने की आवश्यकता है:

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

फिर यह मेरे लिए काम करने लगा।


1

मैंने बस एक बी + पर यह कोशिश की; लगता है मेरे लिए काम करता है:

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 opensl' नहीं चलाया, हालांकि - 'python-coverssl' के लिए सिर्फ एक। मेरा पायथन संस्करण आपके लिए समान प्रतीत होता है: ओप्सनल का कौन सा संस्करण आपको वापस रिपोर्ट किया गया है?

स्टैक ट्रेस आप रिपोर्ट करते हैं (कम से कम अंतिम कुछ पंक्तियाँ) वेब पर अन्य जगह दिखाई देती हैं। उदाहरण के लिए: 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 पोस्ट से दृष्टिकोण लेना: /programming/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 फाइलें आपके सिस्टम पर गायब / गलत हैं?

संपादित करें: ऐसा लगता है कि मेरा वातावरण आपकी अलग निर्देशिका संरचना से लोड हो रहा है।

क्या यह एक 'आभासी env' है: https://virtualenv.pypa.io/en/latest/ ? यदि हां, तो क्या अंतर का हिसाब हो सकता है? मुझे वास्तव में इस बात की अच्छी जानकारी नहीं है कि पायथन कैसे ईमानदार होने के लिए पुस्तकालयों का प्रबंधन करता है - आपको जहाज करने के लिए अजगर विशेषज्ञ की आवश्यकता होगी!

इसके अतिरिक्त (SHA1 के बारे में आपकी टिप्पणी का जवाब देने के लिए) - मुझे याद नहीं आ रहा है कि क्या मुझे ' shasum ' टूल प्राप्त करने के लिए एक विशेष पैकेज स्थापित करना है - यह जाहिरा तौर पर एक पर्ल स्क्रिप्ट है। लेकिन कुछ भी जो एक चेकसम उत्पन्न कर सकता है (या यहां तक ​​कि एक धक्का पर सिर्फ एक 'एलएस-एल' करता है) क्या मुझे लगता है।

जानकारी का एक अंतिम बिट, अगर किसी को समस्या को कम करने में मदद करता है

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

विवरण में मेरे संस्करण की जानकारी को जोड़ा गया। मैं आप के रूप में एक ही Opensl करता हूं।
२२

और हाँ, त्रुटि पर खोज करने से कुछ परिणाम मिलते हैं, लेकिन उनमें से कोई भी संकल्प के साथ नहीं होता है।

1
OpenSSL के लिए आयात पुस्तकालय में अन्य आयातों के अनुक्रम को ट्रिगर करने के लिए लगता है - शायद उन्हें एक-बार आयात करने की कोशिश करें, त्रुटि को कम करने के लिए? मैं अपनी पोस्ट को संपादित करके दिखाऊंगा कि मेरा क्या मतलब है।
मोनोजोनी

हां, ऐसा लग रहा है कि आप इसे क्रूस पर ले जा रहे हैं। लेकिन अब क्या?
jrel

इस अनुमान पर कि यह पायथन पैकेजिंग समस्या हो सकती है - शायद मुख्य StackOverFlow साइट पर पायथन-टैग वाली पोस्ट के साथ क्रॉस-पोस्ट - और देखें कि क्या कुछ पायथन विशेषज्ञ मदद कर सकते हैं।
मोनोजोनी

1

मेरे पास एक पाई (बी) पर बहुत ही समान मुद्दा है।

import OpenSSLवास्तव में एक ही गलत प्रतिक्रिया में परिणाम था। रनिंग pip listने pOOpenSSL को v 0.14 के रूप में दिखाया।

अन्य सभी विचारों को समाप्त करने के बाद मैंने pyOpenSSL का उपयोग करके हटा दिया sudo pip uninstall pyOpenSSL

pip listफिर v0.13 के रूप में pyOpenSSL दिखाया। मैंने 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.