python 安装 cx_Oracle 心得 千万别直接 pip install

本文详细记录了在Windows环境下安装cx_Oracle过程中遇到的问题及解决方案,包括处理找不到vcvarsall.bat、Python版本未在注册表中找到以及DLL加载失败等错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作死小能手这两天闲着没事,把自己电脑重装了,然而重装过后配置开发环境踩了一些坑,这里把安装cx_oracle遇到的坑记录下来,方便以后查看。

使用pip安装出现的问题

命令:

pip install cx_oracle

错误:

Unable to find vcvarsall.bat

我用了最简单粗暴的方法:由于我的操作系统是win10 64位,所以我安装了vs2015,很遗憾报的错误更多了!由于以前我没用pip安装都可以成功安装,所以我舍弃了这种安装方式


到官网下载相应版本的驱动进行安装

我的操作系统为64位,Python版本为3.5.2,所以我到https://pypi.python.org/pypi/cx_Oracle/5.2.1 下载了对应的版本:cx_Oracle-5.2.1-12c.win-amd64-py3.5

1.安装过程中的错误:

Python version 3.5 required, which was not found in the registry

解决方法: 网上看了很多种解决方法,很多是说的修改注册表,这种方式我试了,但是没成功,最后找到这个方法,成功了。运行下面这个脚本,不管是Python3.x还是2.x都可以加入注册表中:


# 解决windows平台下找不到python的注册信息问题 (安装oracle驱动会用) from winreg import * import sys

# tweak as necessary version = sys.version[:3] installpath = sys.prefix

regpath = "SOFTWARE\Python\Pythoncore\{0}\".format(version) installkey = "InstallPath" pythonkey = "PythonPath" pythonpath = "{0};{1}\Lib\;{2}\DLLs\".format( installpath, installpath, installpath)

def RegisterPy(): try: reg = OpenKey(HKEY_CURRENT_USER, regpath) except EnvironmentError as e: try: reg = CreateKey(HKEY_CURRENT_USER, regpath) SetValue(reg, installkey, REG_SZ, installpath) SetValue(reg, pythonkey, REG_SZ, pythonpath) CloseKey(reg) except: print(" Unable to register!") return print("--- Python", version, "is now registered!") return if (QueryValue(reg, installkey) == installpath and QueryValue(reg, pythonkey) == pythonpath): CloseKey(reg) print("=== Python", version, "is already registered!") return CloseKey(reg) print(" Unable to register!") print("*** You probably have another Python installation!")

if name == "main": RegisterPy()

为了防止直接从网页复制运行失败的情况,我把它放到了github上,可以直接下载运行:register.py

2.命令行中运行提示找不到指定的模块

import cx_Oracle

ImportError: DLL load failed: 找不到指定的模块。

这个问题的解决方法网上也说了很多,就是下载instantclient,然后解压将其中的oci.dll拷贝到$Python_Home 或者 $Python_Home\Lib\site-packages 目录下。运气好了,就成功了,运气不好的话可能还会出现找不到指定的模块这个问题,原因是instantclient的版本和cx_Oracle的版本不一致,拿我安装的来举例,我先下载了instantclient11,而我的 cx_Oracle安装的是cx_Oracle-5.2.1-12c.win-amd64-py3.5,一个是11,一个是12c,这样还是出现了这个找不到指定的模块这个问题。正确做法是下载instantclient12和cx_Oracle-5.2.1-12c.win-amd64-py3.5。注意一点是cx_oracle和instantclient的版本不必和Oracle数据库版本一致,只需要cx_Oracle和instantclient版本一致即可。这样这个问题解决了,但是还有坑等着你!

3.命令行中运行提示不是有效的win32模块

import cx_Oracle

DLL load failed: %1 不是有效的 Win32 应用程序

解决方法:上一步我们讨论了版本问题,这一步该说说操作系统位数的问题了,出现这个问题的原因是操作系统、cx_Oracle和instantclient的位数不同,比如我先就是用的win10 64、cx_Oracle-5.2.1-12c.win-amd64-py3.5和instantclient12c(32位),就报了这个错误。正确做法是三者都用64或者三者都用32位系统,将instantclient的oci.dll文件放到$Python_Home\Lib\site-packages 目录下即可。

到此,应该可以解决cx_oracle安装过程的所有问题了,祝大家好运!

补充:虽然这样是可以使用cx_Oracle了,但是实际操作数据库的时候可能会出现unable to acquire oracle environment handle这个错误,解决方法是拷贝oci.dll, oraociei12.dll, oraocci12.dll到site-package中。另外一种方法是为instantclient12c设置环境变量,这样就不用拷贝dll文件了


本文摘自 https://blog.youkuaiyun.com/longxj04/article/details/64922138

### 如何在Python安装cx_Oracle库 #### 使用pip工具安装特定版本的`cx_Oracle` 对于希望快速设置开发环境的情况,可以利用`pip`命令行工具来安装指定版本的`cx_Oracle`。例如,在终端执行如下指令可完成`cx_Oracle` 5.3版的部署: ```bash [root@RHELDB tmp]# pip install cx_Oracle==5.3 Collecting cx_Oracle==5.3 Installing collected packages: cx-Oracle Successfully installed cx-Oracle-5.3 ``` 此过程会自动下载并配置所需的文件到当前环境中[^1]。 #### 针对多Python版本共存情况下的注意事项 当系统存在多个Python解释器实例时,直接采用`.rpm`包形式进行安装可能会遇到兼容性挑战,导致后续无法正常导入该模块。针对此类情形的一个潜在解决方案是在执行`rpm`命令期间附加`--prefix`参数以明确定义目标位置,从而避免冲突的发生[^2]。 #### 关于额外依赖项——Oracle客户端库的需求说明 值得注意的是,为了使`cx_Oracle`能够成功运作并与远程或本地Oracle数据库服务器交互,还需事先准备好相应的Oracle客户端库。这是因为`cx_Oracle`模块负责加载这些必要的共享对象(.so),并通过它们经由网络协议栈(即所谓的Oracle Net)实现同实际存储引擎之间的对话机制[^3]。 #### 测试安装成果的小技巧 最后,可以通过简单的脚本片段验证上述操作是否顺利完成。理想状态下,下面这条单行命令应当输出所期望看到的结果,其中包括但不限于已装载组件的具体编号信息等细节内容: ```python python -c 'import cx_Oracle; print(cx_Oracle)' ``` 如果一切顺利,则表明整个流程无误,并且现在可以在项目里放心大胆地运用这个强大的接口驱动程序了[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值