cx_Oracle:ImportError:DLL加载失败:此应用程序失败

问题描述 投票:16回答:12

这是我做的:

  1. 我在Windows XP SP3上
  2. 我已经安装了Python 2.7.1。
  3. 我下载了instantclient-basic-nt-11.2.0.3.0.zip,解压缩它,并把它放在C:\Program Files\Oracle\instantclient_11_2
  4. 我将此路径添加到Windows Path环境变量中。
  5. 我创建了一个新的环境变量ORACLE_HOME,将此路径作为其值。
  6. 我安装了cx_Oracle-5.1.2-11g.win32-py2.7.msi

在运行import cx_Oracle时,我得到的只是

Traceback (most recent call last): 
  File "<string>", line 2, in <module> 
ImportError: DLL load failed: This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

我显然已经卸载/重新安装了cx_Oracle几次,但似乎没有任何帮助。任何人都可以提供一个线索如何解决这个问题?

UPDATE

我跑了Dependency Walker,它遇到了很多麻烦。但是,第一个丢失的.dll(msvcr80.dll)实际上存在于C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.91_x-ww_0de56c07中。

python dll oracle11g cx-oracle
12个回答
17
投票

好的,最终解决了这个问题(不确定是否所有步骤都是必要的,不知道为什么到目前为止这只有这个工作):

  • here下载并解压缩版本12。
  • 添加“ORACLE_HOME”作为Windows环境变量,并将其值设置为... \ instantclient_12_1,(不是其包含的文件夹!)。
  • 将此相同路径添加到“Path”环境变量。
  • 只有现在安装cx_Oracle

0
投票

我遵循的步骤:

  1. 下载智能客户端instantclient-basic-windows.x64-12.1.0.2.0.zip
  2. 提取并复制到#your目录#\ instantclient_12_1 上面的目录包含dll
  3. 使用#your目录#\ instantclient_12_1附加PATH变量并创建env变量ORACLE_HOME = #your directory#\ instantclient_12_1
  4. 下载并安装cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe
  5. 打开空闲类型导入cx_Oracle

0
投票

如果你在Windows上使用Anaconda试试:

C:\Python27\Scripts\easy_install.exe cx_Oracle-5.1.3-11g.win32-py2.7.exe

在你的cmd上

- >这个


0
投票

我知道这是一个老帖子,但我今天遇到了这个问题,没有一个解决方案有效。我认为这可能对其他人有同样的问题。

Python版本:2.7.15(64位)cx_Oracle版本:6.4.1 Oracle Instant Client:18.3

即使我按照正确的顺序执行了evry步骤,我仍然收到以下错误:

cx_Oracle.DatabaseError:DPI-1047:无法加载Oracle客户端库

我通过将Oracle Instant Client版本降级到12.1来解决了这个问题


9
投票

为了帮助其他人遇到同样的问题:

此错误告诉导入模块时某些DLL之间的32-64位不匹配。可能性是:

  1. 不同的Python和cx_Oracle体系结构(因为如果没有找到合适的Python,Windows上的cx_Oracle安装程序会警告你,因此可能性较小)。
  2. cx_Oracle库和oci.dll的不同架构(更可能)。

请记住,cx_Oracle使用必须安装在您的计算机上的标准Oracle客户端(在OCI级别)。它在几个地方搜索oci.dll,包括PATH。如果它找到错误版本的客户端的oci.dll,则会出现错误。

如果您在PATH环境变量中获得此错误检查路径列表。它可能包含错误版本的Oracle客户端的BIN文件夹的路径。如果您有多个客户端,请在PATH中指定相应的客户端或安装适当的客户端。

注意:ORACLE_HOME对cx_Oracle没有影响。在我的情况下,仅改变PATH有帮助。我认为Ruben的解决方案是有效的,因为第3项('将此路径添加到“Path”环境变量')。


4
投票

我在win 7(64位)上使用python35 64位和oracle express。我使用pip3(pip3 install cx_Oracle)安装了cx_Oracle,而不是从pypi下载安装程序。

我遇到了同样的问题。

我按照上面的指导解决了这个问题,但是我从http://www.oracle.com/technetwork/topics/winx64soft-089540.html下载了64位版本的即时客户端(instantclient-basic-windows.x64-11.2.0.4.0.zip)而不是32位客户端。

然后我把它提取到c:\ oraclexe。并添加了这些环境变量

set ORACLE_BASE=C:\oraclexe
set ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server
set PATH=C:\oraclexe\instantclient_11_2;%PATH%

并运行我的django migrate命令: python manage.py migrate

它工作得很好


2
投票

简单的方法:

  • 确保你已经安装了cx_Oracle,我有qazxsw poi
  • 下载,解压缩cx_Oracle-5.1.3-11g.win32-py2.7.exe并将其移至instantclient_12_1
  • 添加环境变量C:\Python27
  • 重启你的电脑

2
投票

同样的C:\Python27\instantclient_12_1用于设置:

  • Windows 10 x64
  • Oracle Instant Client 12_1 x64
  • Python 2.7.11 x64
  • cx_Oracle cx_Oracle-5.2-12c.win-amd64-py2.7

我解决了它将ImportError文件复制到msvcr100.dll


2
投票

如果在PATH环境变量中Oracle前面有任何无效/无法访问的UNC路径,那么导入cx_Oracle(至少从5.1.2开始)似乎会失败(具有相同的错误)。

修复UNC路径(与Oracle无关)解决了这个问题。


1
投票

如果您使用conda作为包管理器,一种克服DLL的方法是通过执行<oracle_instant_client_dir>来安装oracle-instantclient。这修复了我无法通过手动安装Oracle的即时客户端来解决的依赖关系。


0
投票

这是我第二次提出这个问题,我觉得有必要发布我所做的事情:

我正在使用:

  • 赢8 64位
  • Python 2.7

我没有成功安装Python和cx_Oracle 64位。

它只有在我尝试32位版本并遵循@rob应答指令时才有效


0
投票

我在Windows机器上遇到DLL加载失败的问题。安装oracle客户端,设置变量,运行cx_Oracle-5.1.3-11g.win32-py2.7.exe文件。

但是,当我使用easy_setup安装cx_Oracle时,它修复了问题。

conda install oracle-instantclient
© www.soinside.com 2019 - 2024. All rights reserved.