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

时间:2013-11-23 06:53:45

标签: python dll oracle11g cx-oracle

这就是我的所作所为:

  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
  7. 在运行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几次,但似乎没有任何帮助。有谁可以提供一个线索如何解决这个问题?

    更新

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

    enter image description here

12 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:9)

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

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

  1. Python和cx_Oracle的不同架构(由于找不到合适的Python,因此Windows上的cx_Oracle安装程序会警告您的可能性较小)。
  2. cx_Oracle库和oci.dll的不同架构(更有可能)。
  3. 请记住,cx_Oracle使用必须安装在您计算机上的标准Oracle客户端(在OCI级别)。它在几个地方搜索oci.dll,包括 PATH 。如果它找到错误版本客户端的oci.dll,则会出现错误。

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

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

答案 2 :(得分:4)

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

我遇到了同样的问题。

我按照上面的指导原则解决了这个问题,但是我从{{3}下载了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

效果很好

答案 3 :(得分:2)

简单方法:

  • 确保您已安装cx-Oracle,我有cx_Oracle-5.1.3-11g.win32-py2.7.exe
  • 下载,解压缩instantclient_12_1并将其移至C:\Python27
  • 添加环境变量C:\Python27\instantclient_12_1
  • 重新启动计算机

答案 4 :(得分:2)

设置的相同ImportError

  • 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

我解决了将msvcr100.dll文件复制到<oracle_instant_client_dir>

的问题

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

我正在使用:

  • 赢8 64位
  • Python 2.7

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

只有当我尝试32位版本并遵循@rob应答指令

时,它才有效

答案 8 :(得分:0)

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

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

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

答案 9 :(得分: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

答案 10 :(得分:0)

如果您在Windows上使用Anaconda,请尝试:

conda install cx_oracle
你的cmd上的

- &GT;这个

答案 11 :(得分:0)

我知道这是一篇过时的文章,但是今天我遇到了这个问题,所有解决方案都无效。我认为这可以解决与现在同样问题的其他人。

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

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

  

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

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