Python中的IBM Db2 dsdriver环境变量

qni6mghb  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(366)

操作系统:RHEL 7.9内部版本:对象_1_3_0
我把dsdriver和clidriver下载到/opt/IBM中,运行位于/opt/IBM/dsdriver中的. ./db2cli来设置环境变量,这样import ibm_db就可以在python中工作。
但是,当在外部(而不是从CLI)运行我的python脚本时,该进程会失败,因为它找不到libdb2.so.1
因为在Python中设置环境变量来纠正这个问题似乎没有效果(os.environ["VAR"]="value"os.system('source /opt/IBM/dsdriver/db2profile')没有效果),所以我在/usr/lib64中创建了指向库的符号链接。但是,程序后来遇到了这个问题:
SQL10007N Message "0" could not be retrieved. Reason code: "3". SQLCODE=-1042
执行pip3 show ibm_db会产生下列结果:

Name: ibm-db
Version: 3.1.1
Summary: Python DBI driver for DB2 (LUW, zOS, i5) and IDS
Home-page: http://pypi.python.org/pypi/ibm_db/
Author: IBM Application Development Team
Author-email: opendev@us.ibm.com
License: Apache License 2.0
Location: /usr/local/lib64/python3.6/site-packages/ibm_db-3.1.1-py3.6-linux-x86_64.egg
Requires:

我正在尝试弄清楚如何让Python设置所有必要的变量,以便Db2库可以正常工作。

g9icjywg

g9icjywg1#

只有在需要时才使用dsdriver

  • 编译(例如,使用C或C++等)直接使用CLI API的代码,或
  • 使用jdbc/SQLJ,或者
  • 您的代码依赖于已编目的数据源,或者
  • 当您希望使用db2 CLP和其他客户端工具时,您可以使用这些工具。

对于所有简单的用例,只使用clidriver,并且 * 默认情况下 * python ibm_db模块的安装会自动下载clidriver并将其安装到python站点包目录树中。当您允许自动安装clidriver时,您可以使用命令pip show ibm_db并检查目录位置的输出来查看安装位置。
对于最简单的用例,允许pip install ibm_db将clidriver安装到默认位置(在站点包树下)。对于任何驱动程序的手动安装,在安装ibm_db之前,请根据您的需要选择最合适的位置,然后在安装ibm_db之前将IBM_DB_HOME导出到该位置。
例如,如果python将由主机名上的单个用户使用,那么您可以在/home/$USER中的任何位置安装clidriver,当然,如果同一主机名上的多个用户将运行python,那么手动将驱动程序安装到合适的位置(例如,在/opt下),除非驱动程序本身有默认位置(在这种情况下,使用默认位置)。
对于RHEL和其他Linux发行版,为了确保运行python的用户能够加载Db2共享库,您应该安排编辑shell启动文件(例如.bashrc),使其包含:

export LD_LIBRARY_PATH=/path/to/clidriver/lib:$LD_LIBRARY

其中/路径/到/clidriver/lib(或lib 64)是包含libdb2.so.1文件的目录的绝对路径。使用dsdriver而不是clidriver时,也需要进行更改,但这次的目录路径必须是包含libdb2.so.1文件的dsdriver lib/lib 64目录之一。相关的目录权限和所有权也必须兼容。即必须允许读取和执行。
如果你想让python ibm_db为多个用户运行,你可以通过编辑/etc/ld.so.conf或者在/etc/ld.so.conf.d中创建一个文件,或者你的发行版为此提供的任何方法,使LD_LIBRARY_PATH的更改永久化(对所有用户)。

相关问题