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

问题描述 投票:2回答:3

我使用此问题/答案在Lion中安装DB2:How do I install IBM DB2 Express-C on Mac OS X 10.7 Lion?

配置数据库后,我可以从命令行使用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一起正常工作?

编辑:答案的移动答案

python macos db2 osx-lion python-module
3个回答
1
投票

您可以使用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模块,并且该库不存在。


2
投票

答案:

问题是DirectoryService框架中的特定符号最终在Lion中被删除(在10.2中已弃用)。由DB2 Express-C安装的libdb2.dylib尝试调用此函数,并在导入任一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。将其添加到您的.profile,.bashrc等中,以永久配置您的环境。但是,请记住,这意味着在已配置环境中执行的all命令将尝试链接到雪豹版本的DirectoryService。这可能会导致其他工具出错(我还没有遇到任何错误)。谨慎的做法是仅在需要的shell中设置DYLD_LIBRARY_PATH。


0
投票

在MacOS上安装ibm_db的最简单解决方案是运行以​​下命令:

pip3 install --no-binary "ibm_db" ibm_db

问候,

© www.soinside.com 2019 - 2024. All rights reserved.