M2Crypto 是最完整的为 Python 包装 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,对称密码算法(包括AES)的一个库工具。
而自从 M2Crypto 升级到版本 0.22.5 后,用 pip install M2Crypto 命令来安装 M2Crypto 时总是会失败。
在没有升级到此版本之前,使用 pip 安装则是没有问题的。下面来找找原因。
系统环境:CentOS 6.7 x86
失败关键字:swig

失败现象:

swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
swig -python -I/usr/include/python2.6 -I/usr/include -includeall -modern -builtin -outdir build/lib.linux-i686-2.6/M2Crypto -D__i386__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
swig error : Unrecognized option -builtin
Use 'swig -help' for available options.
error: command 'swig' failed with exit status 1

这里有个最为明显的错误提示:
swig error : Unrecognized option -builtin

这说明,系统里安装的 swig 是没有 -builtin 这个选项的。来看看系统装的 swig 版本。
rpm -qa | grep swig
返回:
swig-1.3.40-6.el6.i686
是不是版本比较旧的缘故导致的呢?再来看看 swig 的帮助。
swig -help
看到其中有:
Note: ‘swig -<lang> -help’ displays options for a specific target language.
因为是涉及到 Python,换个命令来看看。
swig -python -help
返回(节选):
-buildnone      – Use Py_BuildValue() to obtain Py_None (default in Windows)
注意其中的 options,果然是没有 -builtin 这个选项的。

好吧很明显,安装 M2Crypto 所依赖的 swig 版本升级了,而 CentOS 默认的 swig 版本过低了。
下面来升级 swig 版本。官网最新版已经到了 3.0.7 了,就编译安装此版本的。

wget -O swig-3.0.7.tar.gz http://prdownloads.sourceforge.net/swig/swig-3.0.7.tar.gz
tar zxf swig-3.0.7.tar.gz
cd swig-3.0.7
./configure --prefix=/usr
make && make install

安装完成后,再来看一下版本号。
swig -version
返回:
SWIG Version 3.0.7

至此,升级 swig 完成。再来看看新版本的 swig 到底有没有 -builtin 这个选项。
swig -python -help
返回(节选):
-buildnone      – Use Py_BuildValue() to obtain Py_None (default in Windows)
-builtin        – Create new python built-in types, rather than proxy classes, for better performance

果然如此。既然如此,那赶紧继续用 pip 安装 M2Crypto 吧。
pip install M2Crypto

Boom,又出错了。错误信息如下:

swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
swig -python -I/usr/include/python2.6 -I/usr/include -includeall -modern -builtin -outdir build/lib.linux-i686-2.6/M2Crypto -D__i386__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
/usr/include/openssl/opensslconf.h:13: Error: Unable to find 'opensslconf-i386.h'
error: command 'swig' failed with exit status 1

原因是什么呢?M2Crypto 没找到 openssl 的头文件 opensslconf-i386.h
如果是在 x86_64 下安装的话,会找不到 opensslconf-x86_64.h

怎么办呢?看来是不能通过 pip 来安装了,那我们手动来。

wget --no-check-certificate -O M2Crypto-0.22.5.tar.gz https://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-0.22.5.tar.gz
tar zxf M2Crypto-0.22.5.tar.gz
cd M2Crypto-0.22.5
cp /usr/include/openssl/opensslconf-i386.h ./ #手动把头文件复制过来(适用于x86)
cp /usr/include/openssl/opensslconf-x86_64.h ./ #手动把头文件复制过来(适用于x86_64)
python setup.py install

好了,这下终于安装完成了。看看成果:
pip list | grep M2Crypto
返回:
M2Crypto (0.22.5)

后来我去到 M2Crypto 的官网去看了下,已经有人跟作者反映了这个事情。
https://gitlab.com/m2crypto/m2crypto/issues/69
希望作者能在下个版本改进吧。

安装m2crypto报错swig error : Unrecognized option -builtin的更多相关文章

  1. 安装 R 包报错 clang: error: unsupported option '-fopenmp' 的解决方法

    MacOS 上安装 R 包 install.packages("data.table") 后面提示是否安装需要编译的版本: Do you want to install from ...

  2. 一个参数大小写引发的uploadify报错 "Syntax error, unrecognized expression: #"

     上传控件uploadify 报错"Syntax error, unrecognized expression: #" 版本为 uploadify3.2  报错原因:参数ID[hi ...

  3. linux下安装php报错configure: error: Cannot find MySQL header files under /usr/include/mysql.

    linux下安装php报错configure: error: Cannot find MySQL header files under /usr/include/mysql. 2013-03-04 1 ...

  4. 关于mac安装rails报错clang: error: unknown argument

    文章都是从我的个人博客上转载过来的,大家可以点击我的个人博客. www.iwangzheng.com mac上安装rails的时候报错, 安装rails的在终端执行了一句命令: $sudo gem i ...

  5. pip安装lxml报错 Fatal error in launcher: Unable to create process using '"c:\users\administrator\appdata\local\programs\python\python36\python.exe" "C:\Users\Administrator\AppData\L

    pip install lxml 安装报错 E:\apollo\spider_code>Fatal error in launcher: Unable to create process usi ...

  6. php 安装imap报错“configure: error: utf8_mime2text() has new signature”解决

    环境:php官方docker镜像 php:7.2-apache 安装IMAP扩展模块执行命令:docker-php-ext-install imap 报错信息:configure: error: ut ...

  7. 安装zabbix报错configure: error: libcurl library not found

    libcurl 和libcurl-devel都已经安装 且大于7.13.1 但还是报错,这时需要在configure 指定curl路径即可 ./configure --prefix=/usr/loca ...

  8. windows 安装docker报错:Error checking TLS connection: ssh command error: command : ip addr show

    今天安装docker部署的时候总是再报这个错误. 报错的原因是初始化的时候出错了. 在docker 安装目录下有一个文件,如下图所示 将它复制到你电脑用户名目录下生成.docker 的文件夹中,如下图 ...

  9. 解决Android Studio编译后安装apk报错:Error while Installing APK

    刚开始玩 Android ,用Android studio  连接真机做测试,在虚拟机上没有问题,但是真机就会报错 检查了好多地方,最终发现了问题,网上的常规就不介绍了,大家自己去看别的帖子 手机方面 ...

随机推荐

  1. MongoDB设置访问权限、设置用户(转)

    MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),今天特地花了一点时间研究了一下,研究成果如下: 注:研究成果基于W ...

  2. Cool Sites

    尽快学习完成这个网页 https://www.sitepoint.com/php-security-cross-site-scripting-attacks-xss/ https://msdn.mic ...

  3. fedora14 安装中文输入法

    We trust you have received the usual lecture (n. 演讲 讲课 讲座; 教训 训斥 告诫) from the local SystemAdministra ...

  4. Lnmp的安装、配置

    一.首先在本地安装好虚拟机,在虚拟机上安装centos6.5,由于习惯问题,不喜欢直接在虚拟机上操作linux系统,习惯了ssh过去,直接用xshell操作,这完全是个人习惯问题: 1.  用xshe ...

  5. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  6. 升级xcode7的问题:使用shareSDK,坑的你两眼泪汪汪

    升级xcode之前好好的一个项目,升级后就crash,错误直接定位到main函数,报的是EXC_BAD_ACCESS错误,内存错误,就是一个对象释放了,继续对他发消息就会报错.详细定位错误,就是定位不 ...

  7. sql存储过程几个简单例子

    导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...

  8. 循环执行n次的代码

    var audio = document.createElement("audio");  var index = 0;    audio.src = "piano/3C ...

  9. 解决document.onclick在IE下用不了或无效的问题

    document.onclick这个事件在IE这几天突然下不能用了,导致JS代码部分有BUG document.onmouseover;document.onmouseout;document.onm ...

  10. Android开源项目(二)

    第二部分 工具库 主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过 ...