windows安装cx_oracle的坑

2023-11-18

转自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文件了


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows安装cx_oracle的坑 的相关文章

  • ODFPy 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要操作ODF文件格式 开放文档格式 开放办公室的内部格式 我需要用Python来完成 ODFPy
  • 如何使用 lstm 执行多类多输出分类

    I have multiclass multioutput classification see https scikit learn org stable modules multiclass html https scikit lear
  • 使用 matplotlib 在图像数据之上对线网格进行像素精确定位

    我试图在 python 库 matplotlib 显示的图像网格顶部精确地覆盖 1 像素宽线的网格 不幸的是 我似乎无法对结果进行足够精细的控制 以实现线网格与数据网格的正确对齐 如下面的代码所示 结果似乎总是很接近 但并不完全正确 我尝试
  • 如何在Python中获得更精确的十进制值[重复]

    这个问题在这里已经有答案了 from math import sqrt a 1e 8 b 10 c 1e 8 x1 b sqrt b 2 4 a c 2 a x2 b sqrt b 2 4 a c 2 a print x1 format x
  • 使用 Flask 从 Jinja 模板中的 settings.py 文件获取变量

    假设我有 settings py 文件 其中包含一堆常量 将来可能会更多 如何访问 Jinja 模板中的这些变量 Flask 会自动将您的应用程序的配置包含在标准上下文 http flask pocoo org docs templatin
  • Python(openpyxl):将数据从一个excel文件转移到另一个(模板文件)并用另一个名称保存,同时保留模板

    我有一个templateexcel 文件名为template xlsx其中有许多张 我想从单独的地方复制数据 csv文件到第一页template xlsx 命名为data 并将新文件另存为result xlsx同时保留原来的模板文件 我想粘
  • swig char ** 作为指向 char * 的指针

    我在使用 swig 和 char 作为指向变量 char 的指针时遇到问题 而不是作为 char 的列表 我找不到将指针包装到 char 的方法 目的是将连接的结果写入指针引用的 char 中 以下是我的代码 文件指针 cpp includ
  • Pandas:根据其他多级列对最里面的列进行分组排序

    考虑下面的 df In 3771 df pd DataFrame A a 11 B b 11 C C1 C1 C2 C1 C3 C3 C2 C3 C3 C2 C2 D D1 D2 D1 D3 D3 D2 D4 D4 D1 D2 D3 E v
  • PySerial 和多个 Python 安装出现问题

    我的 Windows 7 计算机上有 Python 2 4 4 和 3 1 3 我想使用 PySerial 听说是内置的 所以我尝试了一下import serial在两个版本中 两者都造成了Import Error 然后我从以下位置下载了w
  • 如何消除 matplotlib 轴的相对偏移

    当我尝试对具有足够大数字的范围进行绘图时 我得到一个所有刻度都有相对偏移的轴 例如 plot 1000 1001 1002 1 2 3 我在横坐标轴上得到这些刻度 0 0 0 5 1 0 1 5 2 0 1e3 问题是如何删除 1e3并得到
  • 如何在Python模拟中调用模拟方法

    我想创建一个模拟方法来调用被模拟的底层方法 我正在想象类似以下的内容 但我找不到任何有关模拟对象的文档 该对象包含对被模拟对象的引用 我将其表示为 wrapped method foo below from mock import patc
  • python 中使用 scipy 截断正态分布

    我正在尝试使用截断正态分布scipy在Python3 我想做一些简单的事情 绘制以 0 5 为中心 范围从 0 到 1 的截断法线的 pdf 我有以下代码行 from scipy import truncnorm import matplo
  • 中断QThread睡眠

    我想知道如何暂停 QThread 然后在收到信号时恢复 我已阅读并知道我可以做这样的事情 def run self self ready False while not self ready self sleep 1 QtCore Slot
  • Django外键:获取相关模型?

    是否可以通过外键字段本身获取外键的相关模型 例如 如果我有 3 个模型 class ModelA models Model field1 models CharField max length 10 class ModelB models
  • 继承类中的python __init__方法[重复]

    这个问题在这里已经有答案了 我想为子类提供一些额外的属性 而不必显式调用新方法 那么有没有办法给继承的类一个 init 不重写的类型方法 init 父类的方法 我编写下面的代码纯粹是为了说明我的问题 因此属性等的命名很糟糕 class in
  • Django 1.6:如何在视图中访问静态文件

    我已经尝试过解决方案here https stackoverflow com questions 11721818 django get the static files url in view这对我不起作用 我正在为 Python 创建一
  • FileAllowed 不显示错误消息

    我正在使用 WTForms 我正在对文件上传应用验证 并将其限制为仅 jpg png 和 pdf 格式 但是 如果我输入不正确 则不会出现错误消息 我按照这个教程https flask wtf readthedocs io en stabl
  • 是否有比 .apply() 更慢或更受控制的替代方案?

    所以这似乎是一个奇怪的问题 但我有一只熊猫DataFrame其中包含地址 我想对其进行地理编码 以便获得纬度和经度 我有可以使用的代码 apply 感谢这个非常有帮助的线程 使用 geopy pandas 的新列坐标 https stack
  • 带有 graphviz_layout 的水平树

    在Python中 使用networkx 我可以用以下方法绘制垂直树 g nx balanced tree 2 4 pos nx graphviz layout g prog dot nx draw g pos labels b all no
  • vtkPythonAlgorithm 控制管道执行

    我正在尝试用 python 编写一个 vtk 过滤器ProjectDepthImage进行投影不是问题 它控制 vtk 管道的执行 基本上 我对 UserEvent 有一个回调 当用户在渲染窗口处于活动状态时按下 u 键时会触发该回调 这将

随机推荐

  • AcWing 1230. K倍区间

    给定一个长度为 N 的数列 A1 A2 AN 如果其中一段连续的子序列 Ai Ai 1 Aj 之和是 K 的倍数 我们就称这个区间 i j 是 K 倍区间 你能求出数列中总共有多少个 K倍区间吗 输入格式 第一行包含两个整数 N 和 K 以
  • 位运算举例

    从一个整数中把从右边开始的4 7位取出来 1 a右移4位 a gt gt 4 2 设置一个低4位为1 其余为全为0的数b 0 lt lt 4 0 000000000 0 0 1111111 1 0 lt lt 4 11111 0000 0
  • CH10-HarmonyOS原子化服务

    文章目录 前言 目标 原子化服务定义 原子化服务特性 原子化服务体验 服务中心 原子化服务流转 原子化服务分享 原子化开发基础 开发总体要求 服务卡片定义 运作机制 卡片提供方主要回调函数 JS卡片语法基础 原子化服务开发进阶 卡片结构目录
  • 实验吧-密码学-奇怪的短信(九键密码)

    短信里的一段密文 335321414374744361715332 一般来说是用手机接收短信的 于是可能是手机上的九键 将密文两个两个分隔开 33 53 21 41 43 74 74 43 61 71 53 32 然后对应着拼音九键来找出对
  • Android开发 关于避免切换主题时免闪屏的几种方式

    Android开发 关于避免切换主题时闪屏的几种方式 在activity中调用setTheme来切换夜间模式的方法可能大家有看过相关的文章了 但是调用setTheme设置的主题后界面并没有变化 这时需要调用activity的recreate
  • RAID 磁盘状态为foreign,怎么变成ready

    我们在关掉电源 插入三块硬盘 打开电源 这时候 首先启动服务器 出现 Press
  • Eclipse重命名Package,出现的四个选项的意思。

    1 update references 更新参考 2 Rename subpackages 重命名子包 3 Update textual occurrences in comments and strings forces preview
  • 51单片机SCT15数码管4321断灭长灭程序

    include
  • 第七章 yaml格式

    一 简单说明 yaml是一个可读性高 用来表达数据序列的格式 YAML 的意思其实是 仍是一种标记语言 但为了强调这种语言以数据做为中心 而不是以标记语言为重点 二 基本语法 缩进时不允许使用Tab键 只允许使用空格缩进的空格 数目不重要
  • 好分数阅卷3.0_网上阅卷系统是什么

    什么是网上阅卷系统 网上阅卷系统简称在线阅卷或阅卷系统 是一套集电子光学扫描技术和计算机网络技术于一体的纸答题卡电子处理的一套软硬件结合的现代计算机系统 系统特点及简介它主要实现了答题卡模板的智能化生产 由计算机自动对考生填写选择题段信息点
  • 追根究底,剖析MFC六大关键技术(1)

    题外话 我并不认为MFC减轻了程序员们的负担 MFC出现的目的虽然似乎是为了让程序员不用懂得太多就可以进行视窗编程 但本人在MFC里徘徊了很久很久 因为那时没有书本详细介绍MFC的原理 毫无收获 可能朋友们会说 怎么一定要了解MFC的具体呢
  • HBuilder X 上传git仓库

    首先安装git插件 HBuilder的左上方点击工具 点击插件安装 gt 安装新插件 gt 下滑找到 git 进行安装 安装easy git源码管理 HBuilder的左上方点击工具 点击插件安装 gt 安装新插件 gt 前往插件市场安装
  • K8s Liveness/Readiness/Startup 探针机制

    官方参考文档 目录 前言 一 默认健康检测 1 1 restartPolicy 1 2 测试案例 二 Liveness 三 Readiness 四 Startup 前言 玩过 Docker Swarm 的应该都知道 有一种功能叫自愈功能 当
  • 4.9-4.10 矩阵乘法的性质 & 矩阵的幂运算 & 矩阵的转置及其性质

    矩阵乘法的性质 矩阵的乘法不遵守交换律 矩阵乘法遵守结合律 分配律 对于任意r行c列的矩阵A 存在c行x列的矩阵O 满足 A Ocx Orx 对于任意r行c列的矩阵A 存在x行r列的矩阵O 满足 Oxr A Oxc 证明思路 A B C A
  • 3.二进制数的应用、逻辑学及逻辑门

    由前面的例子中我们讲了很多设备 比如手电筒 继电器 以及两个编码 莫尔斯编码和布莱叶盲文 这些和我们熟知的二进制数有着很大的联系 二进制数我们已经很了解了 接下来举几个例子 1 胶卷的好坏判定 我们把胶卷拉开 会发现有12个方格 是由银色和
  • Keil(MDK-ARM-STM32)系列教程(四)工程目标选项配置(Ⅱ)

    写在前面 本文接着上一篇文章 工程目标选项配置 进行讲述工程目标选项中后五项的配置 也就是C C Asm Linker Debug Utilities这五项配置的具体内容 对于工程目标选项中的C C 选项 不管是初学者 还是资深的软件工程师
  • memcach redis的理解 和有点

    Memcach 是一种缓存技术 在一定的时间内将动态页面经过解析之后保存发到文件中国 下次访问时动态网页就直接调用这个文件 而不必再重新访问数据库 使用memcach 做缓存的好处是 提高网站的访问速度 减轻高并发是服务器的压力 优点 稳定
  • 对于一个程序员来说,电脑的内存需要多大?

    1 程序员电脑内存有多大内存够用足够了 纯写代码的编程对电脑要求不高 尤其对显卡几乎没有要求 一般编程可能开的任务窗口比较多 所以只要cpu和内存大点就可以了一般来说 处理器确实比显卡来得重要一些 因为我们的电脑中只配备了一块处理器 而处理
  • MEX 文件 ‘lsd.mexw64‘ 无效: 找不到指定的模块。问题解决方法

    问题描述 在跑MATLAB和C 混合编程的一个算法时 出现了如下错误 MEX 文件 C Project final code reference code lsd mexw64 无效 找不到指定的模块 如下图所示 原因分析 根据资料 1 的
  • windows安装cx_oracle的坑

    转自http rookiefly cn detail 69 作死小能手这两天闲着没事 把自己电脑重装了 然而重装过后配置开发环境踩了一些坑 这里把安装cx oracle遇到的坑记录下来 方便以后查看 使用pip安装出现的问题 命令 pip