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 with的用法
Aug 22 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
Python模拟随机游走图形效果示例
Feb 06 Python
python定向爬取淘宝商品价格
Feb 27 Python
python中for用来遍历range函数的方法
Jun 08 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
python reverse反转部分数组的实例
Dec 13 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
Python面向对象封装操作案例详解
Dec 31 Python
Python字符串的转义字符
Apr 07 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
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python自动重试HTTP连接装饰器
2015/04/28 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python实现句子翻译功能
2017/11/14 Python
Python中的默认参数实例分析
2018/01/29 Python
Python读取properties配置文件操作示例
2018/03/29 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
商业活动邀请函
2014/02/04 职场文书
会计的岗位职责
2014/03/15 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android
JAVA springCloud项目搭建流程
2022/05/11 Java/Android