操作系统: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库可以正常工作。
1条答案
按热度按时间g9icjywg1#
只有在需要时才使用dsdriver
对于所有简单的用例,只使用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),使其包含:
其中/路径/到/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的更改永久化(对所有用户)。