在ubuntu下安装cx_Oracle需要安装oralce的client,安装oralce的client的方法网上都有:http://hi.baidu.com/%C2%CC%B0%D3%D0%C4%C9%F1%B2%BB%C4%FE/blog/item/de5ebf08557ac3c43bc763d1.html上copy的

Oracle 为 Ubuntu 用户设立了专门的 apt 源服务器,只需要在 /etc/apt/source.list 中添加一行:

deb http://oss.oracle.com/debian unstable main non-free

即可。在运行 apt-get update 命令之前,还需要将该源服务器的公钥添加在本地 apt 系统的密钥库中。首先下载公钥:

wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle

下载完成之后添加该公钥到密钥库中:
sudo apt-key add RPM-GPG-KEY-oracle

再执行
sudo apt-get update
同步软件包索引文件。

我们可以从这个源上下载安装 Oracle 10g Express Edition。可以选择的软件包有:

oracle-xe - Oracle Database 10g Express Western European Edition
oracle-xe-client - Oracle Client 10g Express Edition
oracle-xe-universal - Oracle Database 10g Express Universal Edition

因为我的开发工作只需要在本地安装一个用于连接 Oracle 服务器的客户端,所以我选择安装的是 oralce-xe-client 这个软件包。

sudo apt-get install oracle-xe-client

安装成功之后,还需要在设置相关的环境变量。编辑 /etc/environment,添加如下几行:

ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client 

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
TNS_ADMIN=/usr/lib/oracle
PATH=$PATH:$ORACLE_HOME

 

如果要跟新ubuntu的软件中心,执行

python /usr/share/software-center/update-software-center,顺便说一下software-center是python+xapian写得,之前换xapian版本的时候还弄出了一堆错误。

 

然后下载cx_Oracel包,解压后sudo python setup.py install,有一次报错,是环境变量的问题,google一下,说说是要用root的用户去执行,无赖忘了root的密码,不过不要紧,我把setup.py里涉及到环境变量的都手动赋值,ok

然后import cx_Oracle

又是

ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory

无赖尤其google,是LD_LIBRARY_PATH环境变量的问题,原来在ubuntu下不能直接设置LD_LIBRARY_PATH这个值,去掉环境变量里的LD_LIBRARY_PATH,在/etc/ld.so.conf的最后一行添加/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib,执行sudo ldconfig。

 

其实在用python链接oracle的时候花时间折腾主要不是这个地方,主要是安装完oracle的client,然后sqlplus的过程,出现错误的原因就是自己copy代码的时候有问题,这里不写出来了,很低级。

另外对于查询出中文乱码的解决办法是

import os
os.environ[
'NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

 

That‘s it!