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之Import 模块
Oct 13 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
Python中的函数作用域
May 07 Python
Selenium控制浏览器常见操作示例
Aug 13 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
Python flask框架post接口调用示例
Jul 03 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python descriptor(描述符)的实现
Nov 15 Python
python使用scapy模块实现ping扫描的过程详解
Jan 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
非常好的php目录导航文件代码
2006/10/09 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
Javascript的this用法
2017/01/16 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
vue登录注册实例详解
2019/09/14 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python实现基于POS算法的区块链
2018/08/07 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
吸烟检讨书2000字
2014/02/13 职场文书
项目工作说明书
2014/07/29 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
Pandas数据结构之Series的使用
2022/03/31 Python
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js