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
instantclient-basic-nt-11.2.0.3.0.zip
,将其解压缩,并将其放入C:\Program Files\Oracle\instantclient\u 11\u 2
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
只有当我尝试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
我采取了以下步骤:
如果您在Windows上使用Anaconda,请尝试:
conda install cx_oracle
在你的命令上
->这也有这个问题,如果PATH环境变量中Oracle前面有任何无效/无法访问的UNC路径,那么导入cx_Oracle(至少从5.1.2开始)将失败(出现相同的错误) 修复UNC路径(与Oracle无关)