python安装cx_Oracle模块常见问题与解决方法


Posted in Python onFebruary 21, 2017

本文实例讲述了python安装cx_Oracle模块常见问题与解决方法。分享给大家供大家参考,具体如下:

安装或使用cx_Oracle时,需要用到Oracel的链接库,如libclntsh.so.10.1,否则会有各种各样的错误信息。

安装Oracle Instant Client就可得到这个链接库,避免安装几百兆之巨的Oracle Client。

软件下载地址:

cx_Oracle的主页:http://cx-oracle.sourceforge.net/
必需的Oracle链接库的下载地址:http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

常见的错误和解决方法:

一.win32二进制安装

在windows下安装cx_Oracle-5.0-10g.win32-py2.6.msi之后,导入时,报DLL加载失败的错误,如下:

IDLE 2.6.1

>>> import cx_Oracle
Traceback (most recent call last):
 File "<pyshell#0>", line 1, in <module>
  import cx_Oracle
ImportError: DLL load failed: 找不到指定的程序。

解决方法:

从Oracle站点下载instantclient-basic-win32-10.2.0.4.zip,解压后,将其中的oci.dll文件复制到Python安装目录的Lib/site-packages下,如 C:/Python26/Lib/site-packages

二.linux下二进制安装

在linux_x86_64下,安装cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm时报错。

[root@BJ-UPDATE-01 ~]# rpm -ivh cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
error: Failed dependencies:
    libclntsh.so.10.1()(64bit) is needed by cx_Oracle-5.0.1-1.x86_64

解决方法:

参考http://cx-oracle.sourceforge.net/BUILD.txt

从Oracle站点下载basic-10.2.0.4.0-linux-x86_64.zip到/opt目录并解压,会看到libclntsh.so.10.1在/opt/instantclient_10_2目录中

设置环境变量

vi /root/.bash_profile

增加如下两行:

export ORACLE_HOME=/opt/instantclient_10_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

运行source /root/.bash_profile使改动生效

建立此链接库的符号链接

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

重新安装cx_Oracle

注意加--nodeps参数,否则还会报上述错误

[root@BJ-UPDATE-01 ~]# rpm -ivh --nodeps cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
#5.0.3版本不用加--nodeps参数

三.linux下源代码安装

设置环境变量及符号链接如上,在linux_x86_64下源代码安装,运行python setup.py build,编译时错误信息如下:

Connection.c:1169: 警告:语句不起作用
Connection.c:1171: 错误:'udt_Connection' 没有名为 'environment' 的成员
Connection.c:1172: 警告:传递参数 1 (属于 'Environment_CheckForError')时在不兼容的指针类型间转换
Connection.c:1172: 警告:传递参数 2 (属于 'Environment_CheckForError')时在不兼容的指针类型间转换
Connection.c:1172: 错误:提供给函数 'Environment_CheckForError' 的实参太多
Connection.c:1176: 错误:'udt_Connection' 没有名为 'sessionHandle' 的成员

解决方法:

5.0.3版本的未出现此错误,要注意ORACLE_HOME下要有include目录,这个目录中要有编译需要的源文件,源文件在Oracle Instant Client这个客户端中没有包含。我是从windows客户端的D:/oracle/product/10.2.0/client_1/oci/include这个目录中拷贝的。

四.import错误

>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
>>>

这是因为SELinux的限制,运行如下命令取消限制:

chcon -t texrel_shlib_t cd $ORACLE_HOME/libnnz10.so
chcon -t texrel_shlib_t cd $ORACLE_HOME/libclntsh.so.10.1

五、运行时错误

Traceback (most recent call last):
 File "oracle_conn.py", line 9, in ?
  connection = cx_Oracle.Connection(u"oracle/oracle123@CCIP")
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

还是SELinux的限制,设置SELinux为disabled

关掉selinux:

运行命令:  vim /etc/selinux/config
将selinux=enforcing或permissive改成disabled
运行命令:  setenforce 0

六. UNICODE的安装包有问题

Traceback (most recent call last):
 File "./oracle_conn.py", line 22, in ?
  folderIds=cursor.fetchmany(10)
cx_Oracle.DatabaseError: OCI-22061: Message 22061 not found; No message file for product=RDBMS, facility=OCI; arguments: [T

目前发现5.0.3版的包在执行SQL时会导致报错,不建议使用,换成非UNICODE的包就没问题了。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的getopt函数使用详解
Jul 28 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
flask实现验证码并验证功能
Dec 05 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
opencv 查找连通区域 最大面积实例
Jun 04 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 Python
python读取excel数据并且画图的实现示例
Feb 08 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
python 下划线的多种应用场景总结
May 12 Python
Python实现字符串格式化的方法小结
Feb 20 #Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 #Python
Python 模块EasyGui详细介绍
Feb 19 #Python
Python中字符串格式化str.format的详细介绍
Feb 17 #Python
Python爬虫:通过关键字爬取百度图片
Feb 17 #Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 #Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 #Python
You might like
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
Extjs学习笔记之七 布局
2010/01/08 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
Vue页面骨架屏注入方法
2018/05/13 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
小程序click-scroll组件设计
2019/06/18 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
Python实现的矩阵类实例
2017/08/22 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python实现猜数字游戏
2020/03/25 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
Python for循环与getitem的关系详解
2020/01/02 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
咖啡蛋糕店创业计划书
2014/01/28 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
党员创先争优承诺书
2014/03/26 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
公司委托书格式
2014/08/01 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书