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 10 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
Python3实现的判断环形链表算法示例
Mar 07 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
OpenCV-Python实现轮廓拟合
Jun 08 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 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
mac下安装nginx和php
2013/11/04 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
用实例解释Python中的继承和多态的概念
2015/04/27 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
python烟花效果的代码实例
2020/02/25 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
怎么处理XML的中文问题
2015/03/26 面试题
大学生工作自荐书
2014/06/16 职场文书
单位授权委托书范文
2014/08/02 职场文书
2016新年晚会开场白
2015/12/03 职场文书
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android