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实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
用Python解决计数原理问题的方法
Aug 04 Python
python 日期操作类代码
May 05 Python
Python简单定义与使用二叉树示例
May 11 Python
Python单元测试实例详解
May 25 Python
python监控文件并且发送告警邮件
Jun 21 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
Python如何省略括号方法详解
Mar 21 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
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
JS操作Cookies的小例子
2013/10/15 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
vue.js表格分页示例
2016/10/18 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
简单讲解Python中的闭包
2015/08/11 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
Python将string转换到float的实例方法
2019/07/29 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
企业党员公开承诺书
2014/03/26 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
房屋质量投诉书
2015/07/02 职场文书
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers