Python cx\U Oracle:ImportError:DLL加载失败:此应用程序失败

Python cx\U Oracle:ImportError:DLL加载失败:此应用程序失败,python,dll,oracle11g,cx-oracle,Python,Dll,Oracle11g,Cx Oracle,以下是我所做的: 我使用的是WindowsXPSP3 我已经安装了Python 2.7.1 我下载了instantclient-basic-nt-11.2.0.3.0.zip,将其解压缩,并将其放入C:\Program Files\Oracle\instantclient\u 11\u 2 我将此路径添加到Windowspath环境变量中 我创建了一个新的环境变量ORACLE\u HOME将此路径作为其值 我安装了cx\U Oracle-5.1.2-11g.win32-py2.7.msi 运行i

以下是我所做的:

  • 我使用的是WindowsXPSP3
  • 我已经安装了Python 2.7.1
  • 我下载了
    instantclient-basic-nt-11.2.0.3.0.zip
    ,将其解压缩,并将其放入
    C:\Program Files\Oracle\instantclient\u 11\u 2
  • 我将此路径添加到Windows
    path
    环境变量中
  • 我创建了一个新的环境变量
    ORACLE\u HOME
    将此路径作为其值
  • 我安装了
    cx\U Oracle-5.1.2-11g.win32-py2.7.msi
  • 运行
    import cx\u 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.
    
    回溯(最近一次呼叫最后一次):
    文件“”,第2行,在
    ImportError:DLL加载失败:由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题。
    
    显然,我卸载/重新安装了几次cx_Oracle,但实际上似乎没有任何帮助。有谁能提供一个解决这个问题的线索吗

    更新

    我运行了Dependency Walker,它带来了很多麻烦。但是,第一个缺少的.dll(msvcr80.dll)实际上在
    C:\WINDOWS\WinSxS\x86\u Microsoft.VC80.CRT\u 1fc8b3b9a1e18e3b\u 8.0.50727.91\u x-ww\u 0de56c07中存在


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

    • 从下载并解压缩版本12
    • 添加“ORACLE\u HOME”作为Windows环境变量,并将其值设置为。\instantclient\u 12\u 1,(不是其包含的文件夹!)
    • 将此相同路径添加到“路径”环境变量
    • 现在才安装

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

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

      • Python和cx_Oracle的不同体系结构(不太可能,因为Windows上的cx_Oracle安装程序会在未找到合适的Python时向您发出警告)
      • cx_Oracle库和oci.dll的不同体系结构(更可能)
      • 请记住,cx_Oracle使用标准Oracle客户端(在OCI级别),该客户端必须安装在您的计算机上。它在多个位置搜索oci.dll,包括PATH。如果发现客户端版本错误的oci.dll,则会出现错误

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

        注意:ORACLE主页对cx\u ORACLE没有影响。就我而言,只有改变道路才有帮助。我认为Ruben的解决方案之所以有效,是因为第3项(“将此相同路径添加到“path”环境变量”)。

        简易方法:

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

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

    我正在使用:

    • 赢8 64位
    • Python 2.7
    我没有成功安装Python和cx_Oracle64位


    只有当我尝试32位版本并遵循@rob answer指令时,它才起作用。如果您使用conda作为软件包管理器,解决DLL问题的一种方法是通过执行
    conda安装oracle instantclient
    来安装oracle instantclient。这修复了我无法通过手动安装Oracle的instant client来修复的依赖关系。

    相同的
    ImportError
    发生在以下设置中:

    • Windows 10 x64
    • Oracle即时客户端12_1 x64
    • Python 2.7.11 x64
    • cx_Oracle cx_Oracle-5.2-12c.win-amd64-py2.7

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

    中的问题。我在Win7上使用python35 64位和oracle express(64位)。 我使用pip3(
    pip3安装cx\u Oracle
    )安装了cx\u Oracle,而不是从pypi下载安装程序

    我也面临同样的问题

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


    它工作得很好

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

    我采取了以下步骤:

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

  • 提取并复制到#您的目录#\instantclient_12_1

    上面的目录包含dll

  • 用#your directory#\instantclient_12_1追加PATH变量,并创建环境变量ORACLE_HOME=#your directory#\instantclient_12_1

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

  • 打开空闲类型导入cx\U Oracle


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

    conda install cx_oracle
    
    在你的命令上


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

    修复UNC路径(与Oracle无关)