python安装cxOracle避坑总结不要直接pip install

作者:longxj04 时间:2023-12-07 09:13:11 

转自http://rookiefly.cn/detail/69

作死小能手这两天闲着没事,把自己电脑重装了,然而重装过后配置开发环境踩了一些坑,这里把安装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.csdn.net/longxj04/article/details/64922138

标签:python,cxOracle,安装
0
投稿

猜你喜欢

  • 浅谈python下tiff图像的读取和保存方法

    2021-11-23 04:10:08
  • Django中的用户身份验证示例详解

    2023-10-08 17:06:08
  • python用socket实现协议TCP长连接框架

    2022-05-08 00:22:47
  • 详解PHP变量传值赋值和引用赋值变量销毁

    2023-10-25 00:27:31
  • Python3 用什么IDE开发工具比较好

    2022-10-03 13:43:07
  • golang中defer的使用规则详解

    2023-07-21 22:47:31
  • Python实现ElGamal加密算法的示例代码

    2023-05-23 15:25:58
  • Python中threading库实现线程锁与释放锁

    2021-11-13 10:26:49
  • 省市级联菜单的可用性

    2009-02-24 16:32:00
  • python pip特殊用法之pip install -v -e .命令详解

    2022-07-02 09:56:43
  • Python3.7实现中控考勤机自动连接

    2022-08-07 16:24:22
  • 适合各种浏览器的js拖动层

    2007-10-22 22:43:00
  • mysql left join的基本用法以及on与where的区别

    2024-01-19 23:08:44
  • Go语言中使用flag包对命令行进行参数解析的方法

    2024-02-15 00:45:09
  • 如何获取文件的名称和扩展名?

    2009-11-23 20:50:00
  • python 读取Linux服务器上的文件方法

    2023-03-31 23:54:19
  • Python list和str互转的实现示例

    2022-12-26 13:26:56
  • Tensorflow使用支持向量机拟合线性回归

    2021-01-20 03:38:42
  • PHP投票系统防刷票判断流程分析

    2023-09-27 13:34:03
  • 如何用Python提取10000份log中的产品信息

    2023-06-30 06:23:21
  • asp之家 网络编程 m.aspxhome.com