【发布时间】:2014-02-20 21:30:28
【问题描述】:
我正在运行一个 python 脚本来将一些数据加载到 db2 数据库中。然而,我想出了以下模块加载错误:
Traceback (most recent call last):
File "myscript.py", line 22, in ?
import DB2
File "/opt/freeware/lib/python2.3/site-packages/DB2.py", line 12, in ?
import _db2
ImportError: Could not load module /opt/freeware/lib/python2.3/site-packages/_db2.so.
Dependent module libdb2.a(shr.o) could not be loaded.
Could not load module libdb2.a(shr.o).
System error: No such file or directory
Could not load module /opt/freeware/lib/python2.3/site-packages/_db2.so.
Dependent module /opt/freeware/lib/python2.3/site-packages/_db2.so could not be loaded.
这是我的python模块目录:
[dbadmin@bldr2:/opt/freeware/lib/python2.3/site-packages]# ls -l
total 800
-rw-r--r-- 1 root system 8142 May 30 2008 DB2.py
-rw-r--r-- 1 root system 17133 May 30 2008 DB2.pyc
-rw-r--r-- 1 root system 119 Aug 09 2005 README
-rwxr-xr-x 1 root system 66550 May 30 2008 _db2.so
drwxr-xr-x 2 root system 256 Mar 31 2009 logging
-rw-r--r-- 1 root system 307200 Jan 13 15:19 python-modules.tar
这里可能有什么问题?解决方法是什么?
更新: 我手动重新运行了命令,它成功了,没有吐出错误。然而,该作业最初是一个 crontab 条目,例如:
18 * * * * myscript.py [parameter_list] >cron_nag.log 2>&1
我粘贴在顶部的日志在这个“cron_nag.log”中。但是当我手动重新运行命令时,错误被清除,不再抱怨模块加载,一切都很顺利。
为什么 crontab 进入和手动运行有区别?我使用同一用户 dbadmin 手动运行命令,就像 crontab 条目一样。它们应该在日志文件中产生相同的内容,不是吗?
【问题讨论】:
-
您是否安装了 IBM 数据服务器客户端(或其他合适的 DB2 客户端软件包)?
-
@mustaccio:是的,我有一个命令行工具可以用作 db2 客户端。只要输入
db2,我就可以连接到db2数据库。所以它看起来像一个 python 问题,而不是一个 db2 问题。 -
尝试强制加载db2配置文件“.~db2inst1/sqllib/db2profile”
-
你可以通过运行一些脚本来检查你的 crontab 环境:
* 21 * * * python -c "import sys; print sys.path()" > file.txt。 -
查看
$ man 5 crontab。您可以在 crontab 中设置变量。例如,您可以指定 PYTHONPATH='/path/to/include'