Ubuntu安装cx_Oracle总结
2014-09-06
Linux  / 已有2509人围观

    今天看公司之前的老项目,项目中用到了oracle数据库,需要安装cx_Oracle。本来以为公司wiki中有相应的文档可以参考,会比较简单,谁知道还是遇到了各种各样的问题。

    本身安装cx_Oracle的步骤还很简单,主要有以下几步:

    1. 下载instantclient basic和instantclient sdk,下载地址如下:

        instantclient basic 32位  64位

        instantclient sdk 32位  64位

    2. 解压下载的文件到/opt/oracle目录下,并创建软链接,命令如下:

# 解压文件
sudo mkdir -p /opt/oracle/
sudo unzip instantclient-sdk-linux32-10.2.0.3-20061115.zip
sudo unzip instantclient-sdk-linux32-10.2.0.3-20061115.zip
# 创建软连接
sudo ln -sf libclntsh.so.10.1 libclntsh.so
sudo ln -sf libocci.so.10.1 libocci.so

    3. 设置ORACLE_HOME等变量

    在.bashrc文件最后加入一下几行内容:

export ORACLE_HOME=/opt/opracle/instantclient_10_2
export LD_LIBRARY_PATH=$ORACLE_HOME
export TNS_ADMIN=$ORACLE_HOME/network/admin

    然后执行source ~/.bashrc

    4. 使用pip安装cx_Oracle

sudo pip install cx_Oracle

    问题1. DistutilsSetupError, cannot locate an Oracle software installation

    这个错误是在用pip安装cx_Oracle的时候出现的,大致的意思是说setup.py执行的时候找不到$ORACLE_HOME这个环境变量。但是在执行pip之前已经在bashrc中加入了环境变量,而且执行 env | grep ORACLE_HOME 也能找到相应的环境配置。

    纠结了半天之后,感觉可能是因为用户的问题,添加环境变量的时候是当前用户,而执行pip的时候是root用户。于是,执行 sudo env | grep ORACLE_HOME 命令,发现果然没有环境变量。找到原因之后就比较好办了:

sudo visudo
# 在 default specification 中加入一下两行
Defaults    env_keep += "ORACLE_HOME"
Defaults    env_keep += "LD_LIBRARY_PATH"
Defaults    env_keep += "TNS_ADMIN"

    这个问题就算解决了,之后就可以通过pip正常安装cx_Oracle了。

    问题2. libclntsh.so.10.1: cannot open shared object file: No such file or directory

    出现这个问题,是因为我一开始下载的instantclient的版本不是10g,而是11g,然后导致在ipython中执行import cx_Oracle的时候出现上述错误。

    这个主要是版本的问题,只要将instantclient版本改为10g就可以了。

    问题3. Pycharm引用时出现问题2的错误提示

    本来在ipython中执行import cx_Oracle已经没有问题了,但是在使用Pycharm执行Python项目的时候还是出现了问题2的错误。这个是因为LD_LIBARY_PATH的内容没能正常的引入到环境变量中,修改方法如下:

sudo vim /etc/ld.so.conf
# 然后将LD_LIBARY_PATH的内容添加到文件的最后,即下面一行内容
# /opt/oracle/instantclient_10_2
sudo ldconfig


Over!

本文地址:http://xianglong.me/article/ubuntu-install-python-cx-oracle-DistutilsSetupError/

特别声明:本站文章,如非注明,皆为降龙原创。转载需注明本文链接并保证链接可用。