在Linux Mint 16上安装cx_Oracle用于Python

1 投票
2 回答
1225 浏览
提问于 2025-04-18 06:18

我按照这里的说明 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_HOMEecho $LD_LIBRARY_PATH 时,现在得到了预期的值。不过,错误依然存在。

2 个回答

1

你有没有设置 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;
1

如果你按照你提到的指南操作过,那你应该在 /etc/profile.d/ 目录下创建了一个脚本。确保这个脚本的文件名以 .sh 结尾。

你的问题可能和从这个目录加载脚本有关,我猜是因为你是在一个非登录的bash终端中运行python。

要确认是不是这样,可以尝试用 bash --login 来启动bash,或者在已经打开的bash终端中输入 source /etc/profile。然后检查一下 ORACLE_HOMELD_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

撰写回答