导入"ibm_db"时出错

1 投票
4 回答
7002 浏览
提问于 2025-04-16 04:16

我遇到了这个错误!

错误追踪(最近的调用最后): 文件 "/home/e****/RRR/RRR_Success.py",第37行,在 ? 导入 ibm_db 导入错误:libdb2.so.1:无法打开共享对象文件:没有这样的文件或目录

请帮我解决这个问题

4 个回答

1

这是我为一个docker镜像所做的事情:

WORKDIR /home/db2_cli_odbc_driver
RUN apt-get update && \
    apt-get --assume-yes install \
       wget && \
    wget https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64_odbc_cli.tar.gz -O odbc_cli.tar.gz && \
    tar -xvf odbc_cli.tar.gz && rm odbc_cli.tar.gz && \
    echo /home/db2_cli_odbc_driver/clidriver/lib > /etc/ld.so.conf.d/db2.conf && \
    ldconfig && \
    apt-get purge -y --auto-remove wget && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
ENV IBM_DB_HOME=/home/db2_cli_odbc_driver/clidriver

换句话说,

  • 下载驱动程序
  • 解压它
  • 创建一个 /etc/ld.so.conf.d/db2.conf 文件,指向目标文件夹
  • 运行 ldconfig
  • 在安装python包之前,设置 IBM_DB_HOME 变量
1

根据我的经验,LD_LIBRARY_PATH这个东西其实并不需要。我在一台机器上遇到了这个问题,那台机器上同时安装了Python的db2 odbc驱动和db2服务器。

首先,检查一下系统里是否只有一个libdb2.so.1这个文件。你可以用下面的命令来查找:
find / -name libdb2.so.1

如果发现有两个这样的文件,那它们可能是不同的,所以要检查一下它们的md5值。

[root@localhost ~]# cat /etc/ld.so.conf.d/db2-odbc.conf
/opt/ibm/db2/odbc_cli/clidriver/lib
[root@localhost ~]# ll /opt/ibm/db2/odbc_cli/clidriver/lib/libdb2.so.1
[root@localhost ~]# ll /home/db2inst1/sqllib/lib64/libdb2.so.1
-r-xr-xr-x 1 bin bin 42685547 Dec 15 08:49 /home/db2inst1/sqllib/lib64/libdb2.so.1

[root@localhost ~]# md5sum /home/db2inst1/sqllib/lib64/libdb2.so.1
ffca929b98201e3934e9625d1480890f  /home/db2inst1/sqllib/lib64/libdb2.so.1
[root@localhost ~]# md5sum /opt/ibm/db2/odbc_cli/clidriver/lib/libdb2.so.1
a1247f1582eb1bd2fc248b3901812951  /opt/ibm/db2/odbc_cli/clidriver/lib/libdb2.so.1
[root@localhost ~]#



如果这些文件确实不同,你可以通过修改ldconfig来控制链接哪个文件。

[root@localhost ~]# ll /etc/ld.so.conf.d/
total 24
-rw-r--r--. 1 root root  17 Feb  9  2012 atlas-x86_64.conf
-rw-r--r--  1 root root  28 Dec 15 08:50 db2.conf
-rw-r--r--  1 root root  36 Dec 15 09:07 db2-odbc.conf
-r--r--r--. 1 root root 324 Jun  6  2014 kernel-2.6.32-431.20.3.el6.x86_64.conf
-rw-r--r--. 1 root root  17 Feb  3  2014 mysql-x86_64.conf
-rw-r--r--. 1 root root  22 Jul 18  2011 qt-x86_64.conf
[root@localhost ~]#


我把这个文件夹里的db2.conf文件删掉,然后运行了ldconfig,这样就开始正常工作了。

[root@localhost ~]# mv /etc/ld.so.conf.d/db2.conf mahesh/
[root@localhost ~]# ldconfig


需要注意的是,来自db2inst1的db2客户端仍然可以正常使用,而LD_LIBRARY_PATH就是在这里设置的。

[root@localhost ~]# su - db2inst1
[db2inst1@localhost ~]$ db2 connect to dbname

   Database Connection Information

 Database server        = DB2/LINUXX8664 10.5.3
 SQL authorization ID   = DB2INST1
 Local database alias   = dbname

[db2inst1@localhost ~]$ env | grep LIBRARY
LD_LIBRARY_PATH=/home/db2inst1/sqllib/lib64:/home/db2inst1/sqllib/lib32
[db2inst1@localhost ~]$
1

上面的错误提示说明你的系统找不到DB2的客户端库,也就是相关的文件没有在你的LD_LIBRARY_PATH这个环境变量里。你需要把路径/home/../path/to/sqllib/lib添加到你的LD_LIBRARY_PATH中。想了解更多信息,可以查看这个链接:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.gs.doc/doc/c0006321.html?lang=en

撰写回答