Ответ 1
Вы можете установить эту библиотеку в свою глобальную среду, а затем просто скопировать с ваших глобальных пакетов сайтов на 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?
Вы можете установить эту библиотеку в свою глобальную среду, а затем просто скопировать с ваших глобальных пакетов сайтов на virtualenv.
Кажется, есть ошибка регрессии из более ранней версии 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;
M2Crypto 0.22.3 (текущая версия в pypi) устраняет эту проблему, поэтому самое простое решение теперь просто:
pip install --upgrade M2Crypto
M2Crypto 0.22.3 был выпущен из martinpaljak github repository, а не из оригинала репозиторий M2Crypto.
У меня была такая же проблема с текущей версией (M2Crypto-0.22.5). Последняя работа RC для меня работала.
pip install M2Crypto==0.22.6rc4
Существует 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