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浅拷贝与深拷贝用法实例
May 09 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
python set内置函数的具体使用
Jul 02 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
对django的User模型和四种扩展/重写方法小结
Aug 17 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
Python 寻找局部最高点的实现
Dec 05 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Python序列化模块JSON与Pickle
Jun 05 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP中的事务使用实例
2015/05/26 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
Python中列表与元组的乘法操作示例
2018/02/10 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
wxPython实现画图板
2020/08/27 Python
python中数据库like模糊查询方式
2020/03/02 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
Shell编程面试题
2012/05/30 面试题
烹饪自我鉴定
2014/03/01 职场文书
个人授权委托书范本
2014/04/03 职场文书
社会实践活动总结报告
2014/04/29 职场文书
中学清明节活动总结
2014/07/04 职场文书
端午节活动总结
2014/08/26 职场文书
机关作风建设心得体会
2014/10/22 职场文书
消费者理赔投诉书
2015/07/02 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript