最近有个小需求想使用Scrapy库做抓取,但公司开发机操作系统版本老旧,导致系统默认的openssl库版本也很低(OpenSSL 0.9.7a Feb 19 2003),最终导致安装Scrapy非常麻烦。趁着元旦假期,决定用自己安装好的高版本openssl库作为依赖,重新编译安装开发机的Python环境。
安装及其后使用中遇到一些关于openssl的问题,或许对自己后续工作或别人有参考价值,作为笔记,记录于此。
源码编译安装流程如下:
1. Python官网下载源码包(version 2.7.8)并解压
2. 通过configure配置Makefile参数假定先前已在/home/slvher/tools/openssl-1.0.1j路径下成功安装好高版本openssl,那么,可以通过下面的环境变量来设置gcc的编译/链接参数:
export LDFLAGS="-lssl -lcrypto -Wl,-rpath=/home/slvher/tools/openssl-1.0.1j/lib/"
export CPPFLAGS="-I/home/slvher/tools/openssl-1.0.1j/include"
然后运行configure工具:
./configure --prefix=/home/slvher/tools/Python-2.7.8
configure运行完后,会生成Makefile,check无误后,执行make && make install就能完成Python安装。
3. 验证Python支持的ssl版本
Python安装成功且其bin路径加入PATH环境变量后,可通过下面的命令来验证是否正确支持高版本的openssl库:
python -c "import ssl; print ssl.OPENSSL_VERSION"
例如我机器上的输出结果如下:
OpenSSL 1.0.1j 15 Oct 2014
4. 后续使用依赖openssl的包时,可能遇到的问题及解决思路在依赖了高版本openssl库(普通用户自定义安装在非系统标准路径下)的Python环境下,通过easy_install或pip安装Python第三方包时,可能会报类似于下面的错误(以pip安装Scrapy为例):
此处省略上文...
[Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed -- Some packages may not be found!
此处省略下文...
受StackOverflow这篇帖子
python easy_install fails with SSL certificate error for all packages的启发,