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中的CURL PycURL使用例子
Jun 01 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Python求解正态分布置信区间教程
Nov 20 Python
python操作gitlab API过程解析
Dec 27 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
浅谈python处理json和redis hash的坑
Jul 16 Python
Python基础之hashlib模块详解
May 06 Python
Python时间操作之pytz模块使用详解
Jun 14 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 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python中property和setter装饰器用法
2019/12/19 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
施工安全协议书
2013/12/11 职场文书
超市活动计划书
2014/04/24 职场文书
创先争优公开承诺书
2014/08/30 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
python数字图像处理:图像简单滤波
2022/06/28 Python