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

txo*_*elu 18 python ubuntu virtualenv m2crypto

我在Ubuntu中创建了一个没有python的virtualenv系统包的虚拟环境,并安装了m2crypto,但是当我执行shell并尝试导入M2Crypto时,我收到以下错误:

ImportError: /home/imediava/.virtualenvs/myenv/local/lib/python2.7/site-          
packages/M2Crypto/__m2crypto.so: undefined symbol: SSLv2_method
Run Code Online (Sandbox Code Playgroud)

从环境外部我遇到了同样的问题,除非从ubuntu我用apt-get安装python-m2crypto.我知道我可以使用系统包创建环境,但我不想这样做.

无论如何,我可以在没有系统软件包的情况下创建虚拟环境,然后使用pip安装m2crypto而不进入SSLv2_method?

小智 31

早期版本的M2Crypto似乎存在回归错误.

M2Crypto的源代码 放入virtualenv后,您可以尝试使用下面的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;
Run Code Online (Sandbox Code Playgroud)


Den*_*nis 15

您可以在全局环境中安装此lib,然后从全局站点包复制到virtualenv.

  • 谢谢.我成功地从''dist-packages''复制了M2Crypto,例如:从:/usr/lib/python2.7/dist-packages/M2Crypto到:〜/ .virtualenvs/XXX/lib/python2.7/site-packages / (7认同)
  • 请参阅http://stackoverflow.com/a/8219807/1231384.另外,不要复制整个目录,记住你只需要符号链接:ln -s /usr/lib/python2.7/dist-packages/M2Crypto~/ virtualenvs/XXX/lib/python2.7/site-packages/M2Crypto (6认同)

ric*_*vdh 5

M2Crypto 0.22.3(pypi中的当前版本)修复了这个问题,所以现在最简单的解决方案就是:

pip install --upgrade M2Crypto
Run Code Online (Sandbox Code Playgroud)

M2Crypto 0.22.3已经从martinpaljak的github存储库发布,而不是从最初的M2Crypto存储库发布.