python - salir - virtualenv debian
Instale m2crypto en un virtualenv sin paquetes de sistema (5)
He creado un entorno virtual sin los paquetes del sistema con virtualenv de python en Ubuntu e instalé m2crypto, pero cuando ejecuto un shell e intento importar M2Crypto, aparece el siguiente error:
ImportError: /home/imediava/.virtualenvs/myenv/local/lib/python2.7/site-
packages/M2Crypto/__m2crypto.so: undefined symbol: SSLv2_method
Desde fuera del entorno me encuentro con el mismo problema, a menos que desde Ubuntu instale python-m2crypto con apt-get. Sé que podría crear el entorno con los paquetes del sistema, pero preferiría no hacerlo.
¿Hay alguna forma de que pueda crear un entorno virtual sin los paquetes del sistema y luego instalar m2crypto con pip sin ejecutarme en el método SSLv2?
Hay un patch programado para 0.26.1.
Mientras tanto, puede clonar el repositorio, aplicar el parche e instalar desde la fuente.
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
M2Crypto 0.22.3 (la versión actual en pypi) soluciona este problema, por lo que la solución más simple ahora es simplemente:
pip install --upgrade M2Crypto
M2Crypto 0.22.3 se ha liberado desde el repositorio github de martinpaljak , en lugar del repositorio original de M2Crypto .
Parece que hay un error de regresión de una versión anterior de M2Crypto.
Después de colocar la fuente de M2Crypto en su virtualenv, puede intentar patch con el código de diff que se encuentra a continuación.
Para ello, descargue el código fuente, descomprímalo a través de: tar -xzf M2Crypto-0.21.1.tar.gz
Esto debería crear el directorio M2Crypto-0.21.1
que contendrá el directorio SWIG
En SWIG
encontrarás _ssl.i
, que es el archivo a parchear. En el mismo directorio, cree un archivo llamado _ssl.i.patch
por ejemplo, utilizando el editor nano y pegue en él el código de _ssl.i.patch
completo que se encuentra a continuación.
A continuación, patch _ssl.i _ssl.i.patch
el patch _ssl.i _ssl.i.patch
para combinar el parche en el código. (Después puede eliminar el archivo de parche si lo desea).
Finalmente emitir los comandos:
python setup.py build
seguido por:
python setup.py install
para instalar manualmente.
código de diferencia
--- 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;
Puede instalar esta biblioteca en su entorno global y luego simplemente copiar desde sus paquetes de sitio global a virtualenv.
Tuve el mismo problema con la versión actual (M2Crypto-0.22.5). La última versión RC funcionó para mí.
pip install M2Crypto==0.22.6rc4