【问题标题】:cx_Oracle: ImportError: DLL load failed: This application has failedcx_Oracle: ImportError: DLL load failed: 此应用程序失败
【发布时间】:2013-12-08 04:49:54
【问题描述】:

这就是我所做的:

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

更新

我运行了 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


    【解决方案1】:

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

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

    【讨论】:

    • 我不需要添加 ORACLE_HOME。我将即时客户端解压缩到 c:\Python,然后将 C:\Python27\instantclient_11_2 添加到路径中。谢谢鲁本!
    • 只是添加一些我刚刚找到的东西。它需要在 Windows 上重新启动!
    • 我已经安装了 ORACLE_HOME 和 cx_Oracle 但它不在 PATH 中。我刚刚将 %ORACLE_HOME% 添加到路径中,它就开始工作了。谢谢!
    【解决方案2】:

    帮助有同样问题的其他人:

    此错误说明在导入模块时某些 DLL 之间存在 32-64 位不匹配。可能性是:

    1. Python 和 cx_Oracle 的不同体系结构(不太可能,因为 Windows 上的 cx_Oracle 安装程序会在未找到合适的 Python 时警告您)。
    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”环境变量')。

    【讨论】:

    • 我同意,在我的情况下也不需要 ORACLE_HOME。我的设置是 64 位 Win,64 位 Python 3.4(via Anaconda),通过 Conda 安装了 cx_Oracle,然后只是将提取的 Instantclient 转储到任意 C: 驱动器位置并将其添加到PATH (就像上面和下面的其他人所做的那样)。那时它工作得很好。
    【解决方案3】:

    我在 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:\oracleexe。并添加了这些环境变量

    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 迁移命令:
    python manage.py 迁移

    效果很好

    【讨论】:

      【解决方案4】:

      简单的方法:

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

      【讨论】:

        【解决方案5】:

        相同的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文件复制到&lt;oracle_instant_client_dir&gt;的问题

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • 什么是 UNC 路径?
          • UNC 路径是不包括驱动器号的路径,例如 \\server\sharename\
          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            我正在使用:

            • Win 8 64位
            • Python 2.7

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

            仅当我尝试 32 位版本并遵循 @rob 回答说明时才有效

            【讨论】:

              【解决方案9】:

              我的 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
              

              【讨论】:

                【解决方案10】:

                我遵循的步骤:

                1. 下载智能客户端instantclient-basic-windows.x64-12.1.0.2.0.zip

                2. 提取并复制到#your directory#\instantclient_12_1

                  上面的目录包含dll的

                3. 将 PATH 变量附加到 #your directory#\instantclient_12_1 并创建 env 变量 ORACLE_HOME= #your directory#\instantclient_12_1

                4. 下载并安装 cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe

                5. 开启idle类型导入cx_Oracle

                【讨论】:

                • 这似乎没有回答问题或有助于讨论。
                • @sshale:是的。它有助于查看安装 cx_Oracle 的正确顺序和步骤。
                【解决方案11】:

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

                conda install cx_oracle
                

                在你的 cmd 上

                ->这个

                【讨论】:

                  【解决方案12】:

                  我知道这是一篇旧帖子,但我今天遇到了这个问题,但没有一个解决方案有效。我认为这可能适用于与现在有同样问题的其他人。

                  Python 版本:2.7.15(64 位) cx_Oracle 版本:6.4.1 Oracle 即时客户端:18.3

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

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

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

                  【讨论】:

                  • 请添加有关环境的更多详细信息和/或打开GitHub issue,以便我们了解为什么需要这样做。
                  猜你喜欢
                  • 2016-08-19
                  • 2018-02-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-01-21
                  • 1970-01-01
                  • 2012-01-25
                  • 2019-01-17
                  相关资源
                  最近更新 更多