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定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
Python检测QQ在线状态的方法
May 09 Python
详谈Python高阶函数与函数装饰器(推荐)
Sep 30 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python多线程并发实例及其优化
Jun 27 Python
python实点云分割k-means(sklearn)详解
May 28 Python
python 下载文件的多种方法汇总
Nov 17 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 4.2书写安全的脚本
2006/10/09 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
JavaScript DOM节点添加示例
2014/07/16 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
node中的session的具体使用
2018/09/14 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python简单的制作图片验证码实例
2017/05/31 Python
python梯度下降法的简单示例
2018/08/31 Python
python 读取数据库并绘图的实例
2019/12/03 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
小学生新年寄语
2014/04/03 职场文书
《确定位置》教学反思
2016/02/18 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
python之django路由和视图案例教程
2021/07/26 Python