在Linux Mint 16上安装cx_Oracle用于Python
我按照这里的说明 http://maxolasersquad.blogspot.com/2011/04/cxoracle-on-ubuntu-1104-natty.html 在我的电脑上安装了 cx_Oracle。
我安装了 64 位的 Oracle Client 11.2 和适用于 Python 3.3 的 cx_Oracle 11g。用 help('modules')
查看时,cx_Oracle 确实被列为一个模块,但在导入时我遇到了以下错误信息:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import cx_Oracle
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory
看起来我缺少一个文件,但我不确定是需要安装某个依赖,还是某些配置没有正确设置以指向客户端。
谢谢你们的帮助。
编辑:
更新一下,当我运行 echo $ORACLE_HOME
和 echo $LD_LIBRARY_PATH
时,现在得到了预期的值。不过,错误依然存在。
2 个回答
你有没有设置 ORACLE_HOME 和 LD_LIBRARY_PATH 这两个变量?
我觉得 LD_LIBRARY_PATH 可能没有设置好。
如果没有的话,你可以在你的环境中设置一下:
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
补充一下:
好吧,如果你只运行 sqlplus 会发生什么呢?
你有没有设置 NLS_LANG 这个变量?
可以试试这个:
export NLS_LANG=american_america.WE8ISO8859P1;
如果你按照你提到的指南操作过,那你应该在 /etc/profile.d/
目录下创建了一个脚本。确保这个脚本的文件名以 .sh
结尾。
你的问题可能和从这个目录加载脚本有关,我猜是因为你是在一个非登录的bash终端中运行python。
要确认是不是这样,可以尝试用 bash --login
来启动bash,或者在已经打开的bash终端中输入 source /etc/profile
。然后检查一下 ORACLE_HOME
和 LD_LIBRARY_PATH
这两个变量是否被正确设置了。
如果这样可以正常工作,AskUbuntu上有一些相关的问题(和答案!)关于 /etc/profile.d
目录下的脚本,可能会对你有帮助:
--
补充:
环境变量是可以继承的——如果一个终端有某个变量,那么从这个终端启动的任何程序都应该能继承这些变量。
考虑到这一点,可以尝试执行:
$ bash --login
$ python
>>> import os
>>> print os.environ.get('ORACLE_HOME', '<not set>')
>>> print os.environ.get('LD_LIBRARY_PATH', '<not set>')
>>> import cx_Oracle