2012-05-11 22 views
17

Stworzyłem wirtualne środowisko bez pakietów systemowych z virtualenv Pythona w Ubuntu i zainstalowanym m2crypto, ale kiedy wykonuję powłokę i próbuję importować M2Crypto, pojawia się następujący błąd:Zainstaluj m2crypto na virtualenv bez pakietów systemowych

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

Z zewnątrz mam taki sam problem, chyba że z Ubuntu Instaluję python-m2crypto z apt-get. Wiem, że mogłem stworzyć środowisko z pakietami systemowymi, ale wolałbym tego nie robić.

Czy istnieje możliwość utworzenia wirtualnego środowiska bez pakietów systemowych, a następnie zainstalowania m2crypto z pip bez uruchamiania metody SSLv2_method?

Odpowiedz

14

Możesz zainstalować tę bibliotekę w swoim środowisku globalnym, a następnie skopiować ze swoich globalnych pakietów stron do virtualenv.

+0

Dzięki, nie mam teraz mojego ubuntu, ale spróbuję później. Czy to jest tak proste? Nie sądzisz, że byłyby inne problemy? – txominpelu

+0

Zrobiłem to z lxml i działa dobrze. – Denis

+0

Dzięki, zadziałało! Teraz myślę, że zależy od facetów z ubuntu lub od m2crypto, aby dowiedzieć się, dlaczego wersja pypi nie działa dla ubuntu. – txominpelu

31

Wygląda na to, że istnieje błąd regresji z wcześniejszej wersji M2Crypto.

Po umieszczeniu M2Crypto's source w swoim virtualenv, można spróbować uzyskać kod patch z poniższym kodem diff.

Można to zrobić pobierając kod źródłowy, rozpakować go poprzez: tar -xzf M2Crypto-0.21.1.tar.gz

Należy utworzyć katalog M2Crypto-0.21.1 który będzie zawierał directory SWIG

W SWIG znajdą Państwo _ssl.i, która jest plik do załatania. W tym samym katalogu utwórz plik o nazwie _ssl.i.patch na przykład za pomocą edytora nano i wklej do niego cały kod diff wymieniony poniżej.

Kolejne wydanie polecenia patch _ssl.i _ssl.i.patch w celu scalenia poprawki z kodem. (Później można usunąć plik poprawki, jeśli chcesz).

Wreszcie wydawania poleceń:

python setup.py build

następuje:

python setup.py install

zainstalować ręcznie.

kod 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

dzięki! to naprawdę pomogło. – underrun

+1

W międzyczasie istnieje kilka widelców M2Crypto na Github; Dodałem mój, aby mieć tę doskonałą poprawkę (https://github.com/tobiasherp/M2Crypto). – Tobias

+0

@ bosse-klykken Czy możesz skontaktować się ze mną, komentując https://gitlab.com/m2crypto/m2crypto/commit/b333e591d076154cbf3171b97877d4bd645f64a8 lub przez e-mail (mcepl at redhat dot com), aby potwierdzić, że jesteś autorem tej książki łatka, proszę? Dziękuję Ci. – mcepl

2

Miałem ten sam problem z bieżącym wydaniem (M2Crypto-0.22.5). Najnowsza wersja RC pracowała dla mnie.

pip install M2Crypto==0.22.6rc4 
0

Jest patch trafi do 0.26.1.

W międzyczasie możesz sklonować repozytorium, zastosować poprawkę i zainstalować ze źródła.

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 
Powiązane problemy