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

Rub*_*ert 16 python dll cx-oracle oracle11g

这是我做的:

  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.
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

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

在此输入图像描述

Rub*_*ert 17

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

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

  • 只是添加我刚发现的东西.它需要在Windows上重启! (3认同)

gre*_*van 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"环境变量').