2011-08-16 4 views
2

私はライオンでDB2をインストールするには、この質問/回答を使用:How do I install IBM DB2 Express-C on Mac OS X 10.7 Lion?ibm_dbまたはPyDB2のPythonモジュールをMac OS X 10.7 LionのDB2で使用するにはどうすればよいですか?

私のデータベースを構成した後、私はクエリを実行するために、コマンドラインからDB2を使用することですが、PythonモジュールのIBM_DBとPyDB2の両方がでインポートに失敗します次のエラー:

>>> import ibm_db 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
ImportError: dlopen(/Library/Python/2.7/site-packages/ibm_db-1.0.4-py2.7-macosx-10.7-intel.egg/ibm_db.so, 2): Symbol not found: _dsIsDirServiceRunning 
Referenced from: /Users/<username>/sqllib/lib64/libdb2.dylib 
Expected in: /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService 

がどのように私はこの問題を解決し、IBM_DBとPyDB2がライオンにDB2で正しく動作するために得ることができますか?

編集:答えに移動答え

答えて

1

あなたは完全な信用は以下になり

、私は単純に持つこのスレッドを更新していますDYLD_LIBRARY_PATHを変更する必要はありませんので、あなたは、DirectoryService.frameworkのコピー版を見てinstall_name_toolを使用してDB2ライブラリーを変更することができますLionにdb2/ibm_dbをインストールし、このスレッドをGoogle経由でトップヒットの1つとして見つけ出すプロセスを経ています。ここで説明する他のオプションと

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=238136&start=30&tstart=0

http://www.ibm.com/developerworks/forums/message.jspa?messageID=14604855#14604855

答え(上記のスレッドが消えるはずです):

コピーSnow LeopardのDirectoryService.framework

/opt/SL_Frameworks/DirectoryService.framework 

はその後

cd /opt/IBM/db2/V9.5/ 
install_name_tool -change /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService /opt/SL_Frameworks/DirectoryService.framework/Versions/A/DirectoryService lib64/libdb2sec.dylib 
install_name_tool -change /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService /opt/SL_Frameworks/DirectoryService.framework/Versions/A/DirectoryService lib64/libdb2.dylib 

参照ポストは

libdb2e.dylib 

しかし、私は唯一のIBM_DBのPythonモジュールを使用するには、DB2クライアントをインストールしている第三のライブラリを変更することに言及し、このライブラリは存在しません。

+0

これは私のために働いています。それはもっとクリーンな解決策でもあります。おかげで – drootang

+0

私はマウンテンライオンでテストするために、IBMからMacクライアントをもう一度ダウンロードしました。これは修正なしで動作しているようです(おそらく、昨年のある時点で修正されています) – Chris

2

回答:

問題が(それは10.2で廃止されました)DirectoryServiceのフレームワーク内の特定のシンボルが最終的にはライオンで削除されたことです。 DB2 Express-Cによってインストールされたlibdb2.dylibは、この関数を呼び出そうとし、いずれかのPythonモジュールをインポートするときにエラーを引き起こします。

これを回避するには、古いバージョンのDirectoryServiceフレームワークをリンクするように環境を設定する必要があります。これを行うには、Snow Leopardのインストールが必要です(古いバージョンでは動作するかもしれませんが、テストしていないので、ライオンではありません)。あなたはここにインストールDirectoryServiceのフレームワークを見つける:

/System/Library/Frameworks/DirectoryService.framework/ 

は、Snow Leopardのインストールから、あなたのライオンのインストール中に好きな場所にそのディレクトリをコピーします。この例では、私は〜にディレクトリに名前のOldFrameworksをDirectoryService.frameworkディレクトリをコピー:

export DYLD_LIBRARY_PATH=${HOME}/OldFrameworks/DirectoryService.framework/Versions/Current/:${DYLD_LIBRARY_PATH} 

あらゆる環境で:

~/OldFrameworks/DirectoryService.framework/ 

が実際のライブラリへのパスが含まれていることが$DYLD_LIBRARY_PATHを変数の環境を設定します上記のコマンドを実行すると、Pythonがibm_dbまたはPyDB2をインポートできるように構成されます。 .profile、.bashrcなどに追加すると、環境を永続的に設定できます。ただし、これはを意味することを意味します。設定された環境で実行されるコマンドは、Snow LeopardバージョンのDirectoryServiceとのリンクを試みます。これにより、他のツールでエラーが発生する可能性があります(私はまだ遭遇していません)。 DYLD_LIBRARY_PATHは、必要な場所にあるシェルでのみ設定するのが賢明です。

関連する問題