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中for循环下的索引变量的作用域
Apr 15 Python
Python爬虫代理IP池实现方法
Jan 05 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
python实现对输入的密文加密
Mar 20 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
超实用的 30 段 Python 案例
Oct 10 Python
Flask缓存静态文件的具体方法
Aug 02 Python
python实现批量移动文件
Apr 05 Python
python中%格式表达式实例用法
Jun 18 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中使用BigMap实例
2015/03/30 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
python回调函数用法实例分析
2015/05/09 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
python动态网页批量爬取
2016/02/14 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
python实现人脸识别代码
2017/11/08 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
捐款倡议书范文
2014/02/02 职场文书
德语专业求职信
2014/03/12 职场文书
遗嘱继承公证书
2014/04/09 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
2014年库房工作总结
2014/11/26 职场文书
领导欢迎词范文
2015/01/26 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
施工安全协议书
2016/03/22 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
Go 自定义package包设置与导入操作
2021/05/06 Golang
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
TypeScript 内置高级类型编程示例
2022/09/23 Javascript
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS