簡體   English   中英

如何讓 ibm_db 或 PyDB2 python 模塊在 Mac OS X 10.7 Lion 中與 DB2 一起使用?

[英]How do I get ibm_db or PyDB2 python modules to work with DB2 in Mac OS X 10.7 Lion?

我使用這個問題/答案在 Lion 中安裝 DB2: 如何在 Mac OS X 10.7 Lion 上安裝 IBM DB2 Express-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 一起正常工作?

編輯:移動答案的答案

回答:

問題是 DirectoryService 框架中的一個特定符號最終在 Lion 中被刪除(它在 10.2 中已被棄用)。 由 DB2 Express-C 安裝的 libdb2.dylib 嘗試調用此 function,並在導入 python 模塊時導致錯誤。

要解決此問題,您需要將環境配置為鏈接到舊版本的 DirectoryService 框架。 為此,您需要安裝 Snow Leopard(它可能適用於舊版本,但我尚未對其進行測試,您將需要最新的版本,當然不是 Lion)。 您將在此處找到安裝的 DirectoryService 框架:

/System/Library/Frameworks/DirectoryService.framework/

將該目錄從 Snow Leopard 安裝復制到您希望在 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。 將其添加到 your.profile、.bashrc 等以永久配置您的環境。 但是請記住,這意味着在配置的環境中執行的所有命令都將嘗試鏈接到雪豹版本的 DirectoryService。 這可能會導致其他工具出現錯誤(我還沒有遇到任何工具)。 謹慎的做法是只在需要的 shell 中設置 DYLD_LIBRARY_PATH。

您可以使用 install_name_tool 更改 db2 庫以查看 DirectoryService.framework 的復制版本,因此您不必更改 DYLD_LIBRARY_PATH

完全歸功於以下內容,我只是通過在 Lion 上安裝 db2 / ibm_db 的過程來更新此線程,並通過 Google 發現此線程是熱門話題之一。

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

但是,我只安裝了 db2 客戶端來使用 ibm_db python 模塊,並且該庫不存在。

在 MacOS 上安裝 ibm_db 最簡單的解決方案是運行以下命令:

pip3 install --no-binary "ibm_db" ibm_db

問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM