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