使用环境是Centos6.4,python版本2.7.3,thrift版本0.9.0。使用中遇到了以下问题:
1. root:code for hash md5 was not found
没有找到MD5的库,于是解释器又去寻找SHA1 SHA256 SHA384等等,但是无一例外的找不到。直接import _hashlib,报没有找到libssl.so.6。查找发现这个库是openssl提供的,yum install openssl。发现系统已经安装好了,非常奇怪。locate libssl,结果发现libssl已经在/usr/lib64下,但是版本是libssl.so.10。想当然的用它建立libsso.so.6的符号连接,然后建立libcrypto.so.6的符号链接,不再报告此类错误,但是只要加载smtplib和httplib就会段错误,看来这个库并不是向下兼容。
查找CentOS下libssl.so.6所在的软件包,发现需要安装openssl098e。yum install openssl098e,/usr/lib64下出现了需要的库,问题解决。
2. getsockaddrarg: bad family
这个问题非常诡异,实在不理解是个什么情况,协议族错误。网上查询,无一例外的说明是ipv6惹的祸,看来要特殊解决。
有说法是python默认是不支持ipv6,需要增加--enable-ipv6
编译选项。但是不理解是编译python的时候,还是用python运行程序时候添加,想想项目原本也不需要ipv6,干脆决定关闭它,一劳永逸。
继续在网上查询关闭ipv6的方法。已经在图形界面设置为“ignore”,但是还是不行。发现其是一个内核模块,有cnic依赖其,因此直接rmmod是不行的,遂考虑modprobe -r,但是报告FATAL: Module off not found。可能是有的依赖他的模块,没有实现模块卸载的方法。
网上各种禁用ipv6模块的方法试了,一般是修改/etc/modprobe.d/下的conf文件并重启系统,但是统统不好使。最终把host文件中的本地ipv6解析注释掉,重启。执行ifconfig命令,发现已经没有ipv6的地址。重新运行python程序,问题解决。
转载于:https://blog.51cto.com/luckybins/1322569