Подтвердить что ты не робот

Установите m2crypto на virtualenv без системных пакетов

Я создал виртуальную среду без системных пакетов с python virtualenv в Ubuntu и установил m2crypto, но когда я запускаю оболочку, и я пытаюсь импортировать M2Crypto, я получаю следующую ошибку:

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

Извне среды я сталкиваюсь с той же проблемой, если только из ubuntu я не устанавливаю python-m2crypto с apt-get. Я знаю, что я мог бы создать среду с системными пакетами, но я бы предпочел не делать этого.

Есть ли в любом случае, что я мог бы создать виртуальную среду без системных пакетов, а затем установить m2crypto с помощью pip без использования SSLv2_method?

4b9b3361

Ответ 1

Вы можете установить эту библиотеку в свою глобальную среду, а затем просто скопировать с ваших глобальных пакетов сайтов на virtualenv.

Ответ 2

Кажется, есть ошибка регрессии из более ранней версии M2Crypto.

После размещения источника M2Crypto в вашем virtualenv, вы можете попробовать patch его с помощью diff ниже.

Вы делаете это, загружая исходный код, разворачивая его через: tar -xzf M2Crypto-0.21.1.tar.gz

Это должно создать каталог M2Crypto-0.21.1, который будет содержать каталог SWIG

В SWIG вы найдете _ssl.i, который является файлом для исправления. В том же каталоге создайте файл с именем _ssl.i.patch, например, с помощью редактора nano и вставьте в него полный код, указанный ниже.

Затем выполните команду patch _ssl.i _ssl.i.patch, чтобы слить патч в код. (После этого вы можете удалить файл исправления, если хотите.)

Наконец, выполните команды:

python setup.py build

а затем:

python setup.py install

для установки вручную.

код:

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

Ответ 3

M2Crypto 0.22.3 (текущая версия в pypi) устраняет эту проблему, поэтому самое простое решение теперь просто:

pip install --upgrade M2Crypto

M2Crypto 0.22.3 был выпущен из martinpaljak github repository, а не из оригинала репозиторий M2Crypto.

Ответ 4

У меня была такая же проблема с текущей версией (M2Crypto-0.22.5). Последняя работа RC для меня работала.

pip install M2Crypto==0.22.6rc4

Ответ 5

Существует 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