python - 如何让 ibm_db 或 PyDB2 python 模块与 Mac OS X 10.7 Lion 中的 DB2 配合使用?

标签 python macos db2 osx-lion python-module

我使用这个问题/答案在 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 正常工作?

编辑:将答案移至答案

最佳答案

答案:

问题是 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 等中以永久配置您的环境。但请记住,这意味着在配置的环境中执行的所有命令都将尝试链接到 DirectoryService 的雪豹版本。这可能会导致其他工具出现错误(我还没有遇到过任何错误)。谨慎的做法是仅在需要的 shell 中设置 DYLD_LIBRARY_PATH。

关于python - 如何让 ibm_db 或 PyDB2 python 模块与 Mac OS X 10.7 Lion 中的 DB2 配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7072973/

相关文章:

python - "pip install"和 "python -m pip install"有什么区别?

python - 计算 Pandas 数据框中的平均真实范围列

Python `__init__.py` 和代码中对象的初始化

python使用sqlalchemy将列表存储到sql数据库中

macos - OS X Applescript 检查驱动器是否已安装,如果未安装则安装

java - 在 "BEGIN-OF-STATEMENT"之后找到 CallableSamentment 。预期的 token 可能包括 : "<space>"

db2 - 如何在 DB2 IBM iseries 中编辑 View 而不是删除然后重新创建它?

java - 是什么导致 OS X 上的 Java VM 崩溃并显示 "Invalid memory access of location java"?

c++ - Xcode 拒绝构建我的一个 OpenCL 项目,但成功构建了另一个

通过 BPXBATCH 的 JDBC - 如何获取 TSO 用户凭证?