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实现微信公众平台自定义菜单实例
Mar 20 Python
复习Python中的字符串知识点
Apr 14 Python
Python函数式编程
Jul 20 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
对python中UDP,socket的使用详解
Aug 22 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
简单介绍django提供的加密算法
Dec 18 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
python实战之用emoji表情生成文字
May 08 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 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
php URL验证正则表达式
2011/07/19 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
php后门URL的防范
2013/11/12 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
使用python Django做网页
2013/11/04 Python
Python模块WSGI使用详解
2018/02/02 Python
Python 通配符删除文件的实例
2018/04/24 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
python导入模块交叉引用的方法
2019/01/19 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
canvas使用注意点总结
2013/07/19 HTML / CSS
组织生活会发言材料
2014/12/15 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书