venv salir entorno desactivar crear ambiente python ubuntu virtualenv m2crypto

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