从源码安装和作为RPM安装的httplib2 API有什么不同?
真是让人沮丧啊...
我在我的CentOS开发虚拟机上,从这个网站下载了httplib2
的.tar.gz包来安装它。花了半天时间搞定双向SSL认证后,我在目标的RHEL 5.7机器上安装了python26-httplib2.noarch
。结果代码突然不运行了,因为类的构造函数不一样了!
官方文档对Http
类的定义是这样的:
class httplib2.Http([cache=None][, timeout=None][, proxy_info=None][, ca_certs=None][, disable_ssl_certificate_validation=False])
我用tar安装的代码确实是这样写的,而且可以正常工作:
client = httplib2.Http(ca_certs='/path-to/ca.cert')
但是,在RPM安装中,ca_cert
这个参数却不被识别。我在库里查看,确实看到了以下内容:
class Http(object):
def __init__(self, cache=None, timeout=None, proxy_info=None):
也就是说,参数列表完全不同。
这有什么解释吗?
PS. 对不起,如果我听起来很生气 - 我确实很生气。现在是晚上8点,我本希望今天能把代码提交上去...
PPS. Python 2.6
1 个回答
1
我猜可能是不同版本的httplib2。根据我快速浏览更新日志和代码的理解,ca_certs
是用来验证SSL服务器证书的,这个功能是在httplib2 0.7.0版本中添加的。是不是有可能你用的RPM里的httplib2版本比这个还要旧呢?你可以用print httplib2.__version__
来查看一下当前的版本。
作为一个解决办法,我建议不要从tar.gz文件或者红帽的包中安装Python库;可以使用pip来安装,最好用一个需求文件,这样你可以指定每个外部库的确切版本号(或者至少是最低版本号),确保你的程序能够正常运行。