最近开发的一个项目需要用python操作zookeeper,用到了zkpython,这里备录一下安装方法。主要是linux和Mac OS系统上的安装。windows上的安装方法我没有找到,可能是不支持(有知道的朋友可以分享一下)。
1 Linux上的安装
首先,安装要依赖的zookeeper的c的客户端。这里使用的是3.4.6稳定版,参照如下命令执行即可:
cd zookeeper-3.4.6/src/c
./configure
make
make install
然后,就可以安装zkpython了。可以通过pip和源码两种方式安装:
1)pip安装方法:
pip install zkpython
2)源码安装方法:
我采用的是源码安装。目前最新的zkpython源码下载地址: https://pypi.python.org/pypi/zkpython/0.4.2
#解压后进入目录执行以下命令
python setup.py install
然后需要配置一下环境变量,如在/etc/profile文件中加入下行:
export LD_LIBRARY_PATH=/usr/local/lib/
注意,如果不加环境变量,python在import zookeeper包的时候会报错:
>>> import zookeeper
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libzookeeper_mt.so.2: cannot open shared object file: No such file or directory
2 Mac OS上的安装
除了服务器上安装部署以外,我本地开发用的是Mac,所以在Mac上也折腾了一遍。
我先是参考类似Linux上的安装方法,在Mac上进行zookeeper 3.4.6版本的c客户端编译安装,但是报错了:
In file included from ./include/zookeeper.h:34:
./include/recordio.h:76:9: error: expected ')'
int64_t htonll(int64_t v);
^
/usr/include/sys/_endian.h:141:25: note: expanded from macro 'htonll'
#define htonll(x) __DARWIN_OSSwapInt64(x)
^
/usr/include/libkern/_OSByteOrder.h:78:30: note: expanded from macro '__DARWIN_OSSwapInt64'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt64(x) : _OSSwapInt64(x))
^
./include/recordio.h:76:9: note: to match this '('
/usr/include/sys/_endian.h:141:25: note: expanded from macro 'htonll'
#define htonll(x) __DARWIN_OSSwapInt64(x)
^
/usr/include/libkern/_OSByteOrder.h:78:5: note: expanded from macro '__DARWIN_OSSwapInt64'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt64(x) : _OSSwapInt64(x))
^
In file included from src/zookeeper.c:27:
In file included from ./include/zookeeper.h:34:
./include/recordio.h:76:9: error: conflicting types for '__builtin_constant_p'
int64_t htonll(int64_t v);
^
/usr/include/sys/_endian.h:141:25: note: expanded from macro 'htonll'
#define htonll(x) __DARWIN_OSSwapInt64(x)
^
/usr/include/libkern/_OSByteOrder.h:78:6: note: expanded from macro '__DARWIN_OSSwapInt64'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt64(x) : _OSSwapInt64(x))
^
./include/recordio.h:76:9: note: '__builtin_constant_p' is a builtin with type 'int ()'
/usr/include/sys/_endian.h:141:25: note: expanded from macro 'htonll'
#define htonll(x) __DARWIN_OSSwapInt64(x)
^
/usr/include/libkern/_OSByteOrder.h:78:6: note: expanded from macro '__DARWIN_OSSwapInt64'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt64(x) : _OSSwapInt64(x))
^
2 errors generated.
make[1]: *** [zookeeper.lo] Error 1
make: *** [all] Error 2
后来在网上找了下,确实有这个issue的报告:
https://issues.apache.org/jira/browse/ZOOKEEPER-2049
说是3.4.6版本会存在这个问题,新版本中已经修复了。于是我到zookeeper官网下载了3.4.10版本,然后同样的方法编译安装c客户端,过程顺利,真的没有报错了。
接着,按照Linux上的方法安装zkpython即可。