Установите 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?

5 ответов

Решение

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

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

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

Вы делаете это, загружая исходный код, распаковывая его через: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;

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

pip install --upgrade M2Crypto

M2Crypto 0.22.3 был выпущен из github-репозитория martinpaljak, а не из исходного M2Crypto-репозитория.

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

pip install M2Crypto==0.22.6rc4

Патч намечен на 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
Другие вопросы по тегам