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中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
python的unittest测试类代码实例
Dec 07 Python
python 编码规范整理
May 05 Python
对python添加模块路径的三种方法总结
Oct 16 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
django框架创建应用操作示例
Sep 26 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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之Smarty入门
2007/01/04 PHP
php中in_array函数用法分析
2014/11/15 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
php DES加密算法实例分析
2019/09/18 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
javascript数组的扩展实现代码集合
2008/06/01 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
Python列表计数及插入实例
2014/12/17 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
python 中如何获取列表的索引
2019/07/02 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
学年自我鉴定范文
2013/10/01 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
Java实现简单小画板
2022/06/10 Java/Android