2012-05-11 12 views
17

मैं Ubuntu में अजगर के virtualenv साथ प्रणाली संकुल के बिना एक आभासी वातावरण बनाया है और m2crypto स्थापित किया है, लेकिन जब मैं एक खोल निष्पादित और मैं M2Crypto मैं निम्नलिखित त्रुटि मिलती है आयात करने का प्रयास:प्रणाली संकुल के बिना एक virtualenv पर m2crypto स्थापित

ImportError: /home/imediava/.virtualenvs/myenv/local/lib/python2.7/site-   
packages/M2Crypto/__m2crypto.so: undefined symbol: SSLv2_method 

पर्यावरण के बाहर से मैं एक ही समस्या में भाग जाता हूं जब तक कि उबंटू से मैं पायथन-एम 2 क्रिप्टो को एपीटी-गेट के साथ स्थापित नहीं करता। मुझे पता है कि मैं सिस्टम पैकेज के साथ पर्यावरण बना सकता हूं लेकिन मैं इसे नहीं करना पसंद करूंगा।

क्या वैसे भी है कि मैं सिस्टम संकुल के बिना वर्चुअल वातावरण बना सकता हूं और फिर SSL22method में चलने के बिना m2crypto को पाइप के साथ स्थापित कर सकता हूं?

उत्तर

14

आप इस वैश्विक को अपने वैश्विक वातावरण में स्थापित कर सकते हैं और फिर अपनी वैश्विक साइट-पैकेज से वर्चुअलएन्व में कॉपी कर सकते हैं।

+0

धन्यवाद, मेरे पास अभी मेरा उबंटू नहीं है लेकिन मैं इसे बाद में कोशिश करूंगा। क्या यह करना आसान है? क्या आपको नहीं लगता कि अन्य समस्याएं होंगी? – txominpelu

+0

मुझे यह एलएक्सएमएल के साथ पसंद आया और यह ठीक काम करता है। – Denis

+0

धन्यवाद, यह काम किया! अब मुझे लगता है कि या तो यूबंटू से या एम 2 क्रिप्टो से लोगों को यह पता लगाने के लिए है कि क्यों पिपी संस्करण उबंटू के लिए काम नहीं करता है। – txominpelu

31

M2Crypto के पहले संस्करण से एक रिग्रेशन बग प्रतीत होता है।

अपने वर्चुअलएन्व में M2Crypto's source रखने के बाद, आप patch को diff कोड के साथ आजमा सकते हैं।

आप के माध्यम से स्रोत कोड डाउनलोड करने, यह अनटार ऐसा करते हैं: tar -xzf M2Crypto-0.21.1.tar.gz

इस निर्देशिका M2Crypto-0.21.1 जो SWIG निर्देशिका

शामिल होंगे SWIG में आप _ssl.i मिल जाएगा, जो है बनाना चाहिए पैच करने के लिए फ़ाइल। उसी निर्देशिका में _ssl.i.patch नामक एक फ़ाइल बनाएं उदाहरण के लिए nano संपादक का उपयोग करके और नीचे सूचीबद्ध पूर्ण diff कोड पेस्ट करें।

अगला अंक patch _ssl.i _ssl.i.patch कमांड कोड में पैच मर्ज करने के लिए। (बाद में आप पैच फ़ाइल निकाल सकते हैं अगर आप चाहते हैं।)

अंत में आदेश जारी:

python setup.py build

द्वारा पीछा किया:

python setup.py install

मैन्युअल स्थापित करने के लिए।

diff कोड:

--- SWIG/_ssl.i 2011-01-15 20:10:06.000000000 +0100 
+++ SWIG/_ssl.i 2012-06-17 17:39:05.292769292 +0200 
@@ -48,8 +48,10 @@ 
%rename(ssl_get_alert_desc_v) SSL_alert_desc_string_long; 
extern const char *SSL_alert_desc_string_long(int); 

+#ifndef OPENSSL_NO_SSL2 
%rename(sslv2_method) SSLv2_method; 
extern SSL_METHOD *SSLv2_method(void); 
+#endif 
%rename(sslv3_method) SSLv3_method; 
extern SSL_METHOD *SSLv3_method(void); 
%rename(sslv23_method) SSLv23_method; 
+0

धन्यवाद! यह वास्तव में मदद की। – underrun

+1

इस बीच गितूब पर कई M2Crypto कांटे हैं; मैंने यह उत्कृष्ट पैच (https://github.com/tobiasherp/M2Crypto) रखने के लिए मेरा जोड़ा। – Tobias

+0

@ bosse-klykken क्या आप मुझसे संपर्क कर सकते हैं या तो https://gitlab.com/m2crypto/m2crypto/commit/b333e591d076154cbf3171b97877d4bd645f64a8 या ईमेल (redhat dot com पर mcepl) पर टिप्पणी कर सकते हैं, ताकि मैं आपको इसके लेखक के रूप में स्वीकार कर सकूं पैच, कृपया? धन्यवाद। – mcepl

5

M2Crypto 0.22.3 (pypi में वर्तमान संस्करण) इससे समस्या हल हो, तो सबसे आसान समाधान अब बस है:

pip install --upgrade M2Crypto 

M2Crypto 0.22.3 मूल M2Crypto repository के बजाय martinpaljak's github repository से जारी किया गया है।

+1

सबसे आसान समाधान, शीर्ष पर होना चाहिए – pgorsira

2

मुझे वर्तमान रिलीज (M2Crypto-0.22.5) के साथ एक ही समस्या थी। नवीनतम आरसी निर्माण ने मेरे लिए काम किया।

pip install M2Crypto==0.22.6rc4 
0

patch 0.26.1 के लिए स्लेट किया गया है।

इस बीच, आप रेपो क्लोन कर सकते हैं, पैच लागू कर सकते हैं, और स्रोत से इंस्टॉल कर सकते हैं।

git clone https://gitlab.com/m2crypto/m2crypto.git 
(
    cd m2crypto 
    git checkout 0.25.1 
    curl 'https://gitlab.com/m2crypto/m2crypto/merge_requests/117.diff' | git apply -v 
) 
pip install -U m2crypto 
संबंधित मुद्दे