我已经在Windows中安装了Python 3.12.5和Visual studio。我已按照链接 https://github.com/ibmdb/python-ibmdb/blob/master/INSTALL.md(步骤 1)中提到的步骤进行操作。执行以下命令,
pip install ibm_db
import ibm_db >> this resulted in error ImportError: DLL load failed while importing ibm_db: The specified module could not be found
执行以下命令来克服 python 中的错误
import os
os.add_dll_directory('C:\\Python\\Python312\\Lib\\site-packages\\clidriver\\bin')
import ibm_db
尝试在 Visual Studio 中执行以下代码并导致错误 ImportError: DLL load failed while importing ibm_db: 找不到指定的模块
import ibm_db
ibm_db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username;
PWD=password;", "", "")
print('connection successful')
我不确定我是否错过了任何步骤,因为我尝试从 python 执行 import ibm_db 仍然会导致相同的错误。
根据评论,解决方案涉及正确放置行:
import os os.add_dll_directory(....) import ibm_db
进入正在运行的 python 脚本。
此外,
import ibm_db
行必须不抛出任何异常,它必须成功才能运行python ibm_db。
此解决方法仅在 ibm_db 版本 3.2.3 之后才变得必要,自述文件在 python ibm_db 的 github 页面上对此进行了描述,问题列表描述了此更改的基本原理。目前尚不清楚这是否会是永久性的改变,或者后续的未来改进是否会使其变得不必要。
给
os.add_dll_directory()
的目录应该是clidriver bin子目录位置的完整路径。这在每台机器上都可能不同,并且可能随虚拟环境的不同而变化,并随 python 版本的变化而变化。
查找目录名称的一种方法是使用
pip show ibm_db
并检查“Location:”行并附加“bin”目录。指定目录路径时,将 Microsoft-Windows 目录分隔符(反斜杠)替换为(双反斜杠)。
您还可以使用更多几行Python在当前Python或虚拟环境的site-packages文件夹中搜索clidriver目录,并动态构建位置并附加“bin”子目录并将动态构建的路径传递给
os.add_dll_directory
。这避免了对路径进行硬编码。您还可以使该代码以 MS-Windows 操作系统为条件(因为 python 脚本可能还需要在不使用 os.add_dll_directory()
的 linux 上运行,以便允许您的 python 脚本在不同的操作系统上运行相同的源代码。