为 python 安装 cx_oracle

Posted

技术标签:

【中文标题】为 python 安装 cx_oracle【英文标题】:install cx_oracle for python 【发布时间】:2011-05-17 11:42:31 【问题描述】:

在 Debian 5 上,我一直在尝试 模块,但没有成功。首先,我安装了 oracle-xe-client 及其依赖项(遵循以下链接中的教程here)。

然后,我使用 /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/bin 中的脚本来填充环境变量,例如 PATH、ORACLE_HOME 和 NLS_LANG .

一旦完成,我尝试运行:

sudo easy_install cx_oracle

但我不断收到以下错误:

Searching for cx-oracle
Reading http://pypi.python.org/simple/cx_oracle/
Reading http://cx-oracle.sourceforge.net
Reading http://starship.python.net/crew/atuining
Best match: cx-Oracle 5.0.4
Downloading http://prdownloads.sourceforge.net/cx-oracle/cx_Oracle-5.0.4.tar.gz?download
Processing cx_Oracle-5.0.4.tar.gz
Running cx_Oracle-5.0.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-xsylvG/cx_Oracle-5.0.4/egg-dist-tmp-8KoqIx
error: cannot locate an Oracle software installation

知道我在这里错过了什么吗?

【问题讨论】:

echo $ORACLE_HOME 输出什么? $ORACLE_HOME 设置为 /usr/lib/oracle/xe/app/oracle/product/10.2.0/client 如有疑问,请阅读官方cx_Oracle Installation instructions,其中包含的信息比本文中的许多答案都更新。 【参考方案1】:

另一种方式,不需要 RPM。你需要是root

    依赖关系

    安装以下软件包:

    apt-get install python-dev build-essential libaio1
    

    下载 Linux x86-64 的即时客户端

    从 Oracle 的download site 下载以下文件:

    解压 zip 文件

    将下载的zip文件解压到某个目录,我正在使用:

    /opt/ora/
    

    添加环境变量

    /etc/profile.d/oracle.sh 中创建一个包含

    export ORACLE_HOME=/opt/ora/instantclient_11_2
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
    

    /etc/ld.so.conf.d/oracle.conf 中创建一个包含

    /opt/ora/instantclient_11_2
    

    执行以下命令

    sudo ldconfig
    

    注意:您可能需要重新启动才能应用设置

    创建符号链接

    cd $ORACLE_HOME 
    ln -s libclntsh.so.11.1 libclntsh.so
    

    安装cx_Oraclepython包

    您可以使用pip 进行安装

    pip install cx_Oracle
    

    或者手动安装

    下载与您的 Python 和 Oracle 版本对应的cx_Oracle source zip。然后展开存档,并从解压缩的目录运行:

    python setup.py build 
    python setup.py install
    

【讨论】:

这可能是题外话,因为我正在 Mac OS X 10.9.2 上构建它并最终让它工作。除了 Burhan 在 1-7 中为构建路径和符号链接设置环境变量的提示之外,Oracle 的 dylib 文件似乎具有 硬编码 链接路径!!!所以这篇文章有点帮助:caseymorford.com/2014/04/17/installing-oci8-with-mamp-pro 对于 TL;DR,您需要创建另外两个符号链接来解决 dlopen() 错误。否则我们很好! 我在 Ubuntu 16.2 (Docker) 上执行了步骤 1-5,一切正常!!!谢谢!节省了很多时间... 不要使用 Instant Client 设置 ORACLE_HOME - 这可能会导致在运行时读取错误的配置文件。在编译时,旧的 cx_Oracle 安装在 build 时需要它,但现在不再如此。此外,新的即时客户端会自动创建符号链接,因此可以省略该步骤。总之,只需关注cx_Oracle installation instructions。【参考方案2】:

我建议您获取 rpm 文件并使用外星人安装它们。这样,您以后可以运行apt-get purge no-longer-needed

In my case,我需要的唯一环境变量是LD_LIBRARY_PATH,所以我这样做了:

echo export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib >> ~/.bashrc
source ~/.bashrc

我想在你的情况下路径变量将是/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib

【讨论】:

Instant Client 19 RPM 将配置和运行 ldconfig,因此您无需设置 LD_LIBRARY_PATH。【参考方案3】:

以下内容对我有用,无论是在 Mac 还是 Linux 上。这个命令应该下载需要的附加文件,不需要设置环境变量。

python -m pip install cx_Oracle --pre

注意,--pre 选项用于开发和预发布 Oracle 驱动程序。截至发帖时,它正在抓取cx_Oracle-6.0rc1.tar.gz,这是必需的。 (我使用的是 python 3.6)

【讨论】:

【参考方案4】:

Thx Burhan Khalid,我忽略了你的“你需要成为 root”的引用,但是当你不是 root here 时找到了方法。

在第 7 点你需要使用:

sudo env ORACLE_HOME=$ORACLE_HOME python setup.py install 

或者

sudo env ORACLE_HOME=/path/to/instantclient python setup.py install

【讨论】:

【参考方案5】:

感谢布尔汉·哈立德。您对制作软链接的建议使我的安装最终成功。

回顾一下:

    即时客户端的基础版和SDK版都需要

    需要同时设置 LD_LIBRARY_PATH 和 ORACLE_HOME

    您需要创建一个软链接(在我的例子中是 ln -s libclntsh.so.12.1 libclntsh.so)

这些都没有记录在任何地方,这令人难以置信且令人沮丧。我昨天花了 3 个多小时进行失败的构建,因为我不知道要创建软链接。

【讨论】:

【参考方案6】:

我认为可能是 sudo 无权获取 ORACLE_HOME。你可以这样做。

sudo visudo

修改文字添加

默认 env_keep += "ORACLE_HOME"

然后

sudo python setup.py build install

【讨论】:

【参考方案7】:

或者,您可以使用以下步骤在不使用 PIP 的情况下安装 cx_Oracle 模块

    从这里下载源代码https://pypi.python.org/pypi/cx_Oracle [cx_Oracle-6.1.tar.gz]

    使用以下命令提取 tar (Linux)

    gunzip cx_Oracle-6.1.tar.gz

    tar -xf cx_Oracle-6.1.tar

    cd cx_Oracle-6.1

    构建模块

    python setup.py 构建

    安装模块

    python setup.py 安装

【讨论】:

它可以由普通用户执行还是您需要管理员权限来构建和安装它(在 linux 上)?【参考方案8】:

这在 Ubuntu 16 上对我有用: 从 Oracle 网站下载 ('instantclient-basic-linux.x64-12.2.0.1.0.zip' 和 'instantclient-sdk-linux.x64-12.2.0.1.0.zip') 然后执行以下脚本 (你可以一块一块做,我是作为一个ROOT做的):

apt-get install -y python-dev build-essential libaio1
mkdir -p /opt/ora/
cd /opt/ora/

## Now put 2 ZIP files:
# ('instantclient-basic-linux.x64-12.2.0.1.0.zip' and 'instantclient-sdk-linux.x64-12.2.0.1.0.zip') 
# into /opt/ora/ and unzip them -> both will be unzipped into 1 directory: /opt/ora/instantclient_12_2 

rm -rf /etc/profile.d/oracle.sh
echo "export ORACLE_HOME=/opt/ora/instantclient_12_2"  >> /etc/profile.d/oracle.sh
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME"  >> /etc/profile.d/oracle.sh
chmod 777 /etc/profile.d/oracle.sh
source /etc/profile.d/oracle.sh
env | grep -i ora  # This will check current ENVIRONMENT settings for Oracle


rm -rf /etc/ld.so.conf.d/oracle.conf
echo "/opt/ora/instantclient_12_2" >> /etc/ld.so.conf.d/oracle.conf
ldconfig
cd $ORACLE_HOME  
ls -lrth libclntsh*   # This will show which version of 'libclntsh' you have... --> needed for following line:

ln -s libclntsh.so.12.1 libclntsh.so

pip install cx_Oracle   # Maybe not needed but I did it anyway (only pip install cx_Oracle without above steps did not work for me...)

您的 python 脚本现在可以使用“cx_Oracle”了...享受吧!

【讨论】:

【参考方案9】:

这对我有用

python -m pip install cx_Oracle --upgrade

详情请参考oracle快速入门指南

https://cx-oracle.readthedocs.io/en/latest/installation.html#quick-start-cx-oracle-installation

【讨论】:

【参考方案10】:

如果您尝试在 MAC 中安装,只需解压缩您下载的 Oracle 客户端并将其放入您编写 python 脚本的文件夹中。 它将开始工作。

设置环境变量的问题太多了。 它对我有用。

希望这会有所帮助。

谢谢

【讨论】:

您没有在 macOS 上设置任何环境变量 - 因为 Apple 的 SIP 停止了 DYLD_LIBRARY_PATH 的工作。从Instant Client installation instructions 你只需运行mkdir ~/lib; ln -s ~/instantclient_18_1/libclntsh.dylib ~/lib/【参考方案11】:

尝试使用以下代码重新安装它:

!pip install --proxy http://username:windowspwd@10.200.72.2:8080 --upgrade --force-reinstall cx_Oracle

【讨论】:

【参考方案12】:

如果您需要安装特定版本的 cx_Oracle,例如 7.3,它是支持 Python 2 的最后一个版本,您可以执行以下操作:

python -m pip install cx_Oracle==7.3

【讨论】:

以上是关于为 python 安装 cx_oracle的主要内容,如果未能解决你的问题,请参考以下文章

如何用pip为Python3安装模块

Python 3.4 和 2.7:无法为 python 3.4 安装 numpy 包

在 MacOS 上为系统范围的 Python 安装 OpenCV

为python安装pip

为 python 安装 numba

在 python3.3 上安装 numpy - 为 python3 安装 pip