6

我已经安装了 oracle client 和 oracle client-dev,并设置了 ORACLE_HOME 环境变量。然而,当我尝试安装 tux_oracle(python setup.py build)时,我得到以下信息: 致命错误:oci.h:没有这样的文件或目录

4

3 回答 3

6

好吧,答案是安装 cx_Oracle 而不是 tx_Oracle。在 Ubuntu 中执行此操作的方法如下:

  1. 您必须在 PC 中安装 oracle 客户端。如果不是从 oracle http://www.oracle.com/technetwork/topics/linuxsoft-082809.html下载。
  2. 在您的 PC 中安装外星人以便能够将 rpm 转换为 deb:
sudo apt-get -i 外星人
  1. 将 rpm 转换为 deb:
sudo alien -d oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm
  1. 安装
    sudo dpkg -i oracle-instantclient11.2-basic_11.2.0.2.0-2_i386.deb
  2. 通过创建一个必须包含以下内容的文件 oracle.sh 在 /etc/profile.d 中设置 ORACLE_HOME 环境变量:
导出 ORACLE_HOME=/usr/lib/oracle/11.2/client
源 oracle.sh
  1. 更新 LD_LIBRARY_PATH:
sudo vi /etc/ld.so.conf.d/oracle.conf 必须包含:  
"$ORACLE_HOME/lib"
须藤 ldconfig
  1. 从http://cx-oracle.sourceforge.net/下载并安装 cx_Oracle(取决于您使用的 oracle 和 python 的版本) 再次使用 alien 将 rpm 转换为 deb 并安装:
须藤外星人-d cx_Oracle-5.1-11g-py32-1.i386.rpm
sudo dpkg -i cx-oracle_5.1-2_i386.deb
  1. cx_Oracle 安装在 /usr/lib/python2.7/dist-packages/ 中。你必须这样做: sudo mv site-packages/cx_Oracle* dist-packages/ sudo rmdir site-packages/ sudo ln -s dist-packages site-packages

现在您连接到 oracle 应该没有问题。从python类型:

导入 cx_Oracle

要连接到数据库,请在 tsnames.ora 中或直接指定连接字符串:

connection_string = '用户名/密码@(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA= (SID=MY_SID)))'
于 2011-12-02T10:22:09.740 回答
1

该头文件可以在开发套件中找到。出于某种原因,它不包含在默认分发包中。看一下

http://my.opera.com/onyxluo/blog/cannot-find-oci-h-in-oracle9-2-client

这是页面内容,为您提供方便。我从谷歌缓存中得到它,因为当我到达那里时页面已经关闭。

出现这个问题的原因是Oracle9.2客户端没有安装OCI(Oracle Call Interface)包。“oci.h”的默认路径是 $ORACLE_HOME/rdbms/demo。Oracle 数据库 9.2.0.1 上不存在此问题。但是对于Oracle 9.2.0.1 客户端,即使您选择客户端安装的完整包,OCI 包也不包含在客户端中。

解决方案:

  1. 首先安装 Oracle 9.2.0.1 客户端。
  2. 在 OUI(Oracle Universal Installer) 中,使用与 Oracle 9.2.0.1 客户端相同的 oracle home,然后选择 Oracle Database install。
  3. 在数据库安装中选择自定义
  4. 取消选中 Enterprise Manager 和 Oracle Database 以及除 OCI 和 OCCI 之外的其他。

安装 OCI 后,$ORACLE_HOME/rdbms/demo 将包含 oci.h 和其他 *.h 文件。

于 2011-11-25T14:23:58.957 回答
1

我正在使用cx_oracle连接到我的 Oracle 数据库。你试一试了吗?

于 2011-11-25T12:00:06.437 回答