2

この質問/回答を使用して、LionにDB2をインストールしました:Mac OS X10.7LionにIBMDB2Express-Cをインストールするにはどうすればよいですか?

データベースを構成した後、コマンド行から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をLionのDB2で正しく動作させるにはどうすればよいですか?

編集:回答を回答に移動

4

3 に答える 3

2

答え:

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

これを回避するには、古いバージョンのDirectoryServiceフレームワークに対してリンクするように環境を構成する必要があります。これを行うには、Snow Leopardをインストールする必要があります(古いバージョンでも動作する可能性がありますが、私はテストしていません。もちろん、Lionではない最新のものが必要です)。DirectoryServiceフレームワークは次の場所にインストールされています。

/System/Library/Frameworks/DirectoryService.framework/

そのディレクトリをSnowLeopardインストールからLionインストール内の任意の場所にコピーします。この例では、DirectoryService.frameworkディレクトリをOldFrameworksという名前のディレクトリにコピーしました。

~/OldFrameworks/DirectoryService.framework/

$DYLD_LIBRARY_PATH実際のライブラリへのパスを含むように環境変数を設定します。

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

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

于 2011-08-16T21:53:31.627 に答える
1

install_name_toolを使用してdb2ライブラリを変更し、コピーされたバージョンのDirectoryService.frameworkを確認できるため、DYLD_LIBRARY_PATHを変更する必要はありません。

完全なクレジットは次のとおりです。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

答え(上記のスレッドが消えた場合):

SnowLeopardDirectoryService.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

参照された投稿は、3番目のライブラリの変更について言及しています

libdb2e.dylib

ただし、ibm_db pythonモジュールを使用するためにdb2クライアントをインストールしただけであり、このライブラリーは存在しません。

于 2011-12-23T16:39:08.737 に答える
0

MacOSにibm_dbをインストールする最も簡単な解決策は、以下のコマンドを実行することです。

pip3 install --no-binary "ibm_db" ibm_db

よろしく、

于 2020-02-23T10:10:11.557 に答える