为 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_Oracle
python包
您可以使用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的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.4 和 2.7:无法为 python 3.4 安装 numpy 包