在没有系统包的virtualenv上安装m2crypto

我已经创build了一个虚拟环境,没有在Ubuntupythonvirtualenv系统软件包,并安装m2crypto,但是当我执行一个shell,我尝试导入M2Crypto我得到以下错误:

ImportError: /home/imediava/.virtualenvs/myenv/local/lib/python2.7/site- packages/M2Crypto/__m2crypto.so: undefined symbol: SSLv2_method 

从外部环境我遇到了同样的问题,除非从Ubuntu的我安装python-m2crypto与apt-get。 我知道我可以使用系统包来创build环境,但是我宁愿不这样做。

有无论如何,我可以创build一个没有系统包的虚拟环境,然后用pip安装m2crypto没有运行到SSLv2_method?

你可以在你的全局环境中安装这个lib,然后从你的全局站点包复制到virtualenv。

似乎有一个早期版本的M2Crypto的回归错误。

在将M2Crypto的源代码放入virtualenv之后,可以尝试使用下面的diff代码对其进行修补 。

您可以通过下载源代码来解决这个问题,请通过以下方式解压缩: tar -xzf M2Crypto-0.21.1.tar.gz

这应该创建包含SWIG目录的目录M2Crypto-0.21.1

SWIG你会发现_ssl.i ,这是要修补的文件。 在同一个目录中创建一个名为_ssl.i.patch的文件,例如使用nano编辑器,并将下面列出的完整diff代码粘贴到其中。

接下来发行patch _ssl.i _ssl.i.patch命令将补丁合并到代码中。 (之后你可以删除补丁文件,如果你想。)

最后发出命令:

python setup.py build

其次是:

python setup.py install

手动安装。

diff代码:

 --- 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仓库发布,而不是从原来的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