32ビットモードで32ビットPythonを使用する必要があります(Mac OS Xでは64ビットでセグフォールトしますが32ビットで動作するoracleinstantclient-10.2.0.4のため)。私が動物園の飼育係を得るまで、これまでのところすべてが順調でした。実際、ZooKeeper Pythonバインディング(zkpython)。
クライアント自体をデフォルトのまま64ビットのままにして、zkpythonを32ビットにしようとしました。しかし、この場合、インポート時にエラーが発生します。
Python 2.6.7 (r267:88850, Jul 31 2011, 19:30:54)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
>>> import zookeeper
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(./zookeeper.so, 2): Symbol not found: _ZOO_ASSOCIATING_STATE
Referenced from: /Users/nolar/Downloads/zoo/zookeeper.so
Expected in: flat namespace
in /Users/nolar/Downloads/zoo/zookeeper.so
Python 2.7についても同じです(ここでは2.6と2.7の両方が32ビットであり、sys.maxint == 2147483647です)。そして、ここでは32ビットのzookeeperクライアントが必要だと思います。これは、zkpythonをコンパイルするときに、意味のある警告が1つだけ表示されるためです。
ld:警告:ファイル../../..//src/c/.libs//libzookeeper_mt.dylibを無視します。ファイルは、リンクされているアーキテクチャではないサポートされていないファイル形式用にビルドされました(i386)
そこで、zookeeperクライアント自体を32ビットにしようとしました。しかし、何を試しても、32ビットモードでビルドすることはできません。libzookeeper_mt.2.dylibは常に64ビットです(ARCH_FLAGS = "-arch i386"、configure --build = i386 --host = i386、arch-i386… 、など— .dylibは常に64ビットです)。
$ file libzookeeper_mt.2.dylib
libzookeeper_mt.2.dylib: Mach-O 64-bit dynamically linked shared library x86_64
そして、ここでの最悪のポイントは、i386アーチが組み込まれていないことです。そのため、このi386バージョンを「lipo」で抽出することはできません。
したがって、主な質問は、ZooKeeperのPythonバインディングを64ビットのMac OS X Lion(10.7)で32ビットのPythonで動作させる方法ですか?
2番目の質問は次のとおりです。64ビットMacOSX Lion 10.7で32ビットモードでZooKeeperを構築するにはどうすればよいですか?