您运行的是哪个版本的 Windows?是 32 位还是 64 位?
您的 Oracle Instant Client 32 或 64 是位吗?
你的 Python 安装是 32 还是 64 位?
您的 cx_oracle 版本是否正确? 32 或 64 位?
MSVCR90.dll 是 Microsoft Visual C++ 2008 SP1 Redistributable 包的一部分。
32 位版本可用here,64 位版本可用here。
IESHIMS.dll 将位于C:\Program Files\Internet Explorer\Ieshims.dll(32 位 Windows 位置或 64 位 Windows 位置)或 C:\Program Files\Internet Explorer (x86)\Ieshims.dll`(64 位 Windows 上的 32 位 Windows 位置) ) ,如果您的 Windows 版本是 Vista 或更高版本。
GPSVC.dll 应该存在于C:\Windows\System32。
Dependency Walker 将最后 2 个 DLL 报告为缺失,因为 Windows 错误报告使用 IEFrame.DLL 并延迟加载,这意味着它们可能永远不会真正需要。
我发现为了让 cx_oracle 干净地导入,你需要确保它的依赖的版本匹配。您还需要确保 Oracle 客户端安装与您的 ORACLE_HOME 匹配,并且您的 PATH 变量包含设置为环境变量或在注册表中的 %ORACLE_HOME%/bin,并且您的 tnsnames.ora 文件位于设置的 TNS_ADMIN 值中至。正如 Emmanuel 的回答中所述,未设置的 TNS_ADMIN 设置的默认值为 %ORACLE_HOME%\network\admin。
我也很少使用 oracle 安装程序的即时客户端版本,除非绝对必要,因为与其他版本不同,它并不总是确保正确设置或维护路径、ORACLE_HOME 或 TNS_ADMIN,这会导致 tnsnames.ora 和 OCI。找不到dll。当您在同一台机器上有多个 Python 版本或 Oracle 版本时,这会变得更加复杂。
要显式设置它们,您可以使用环境变量(用户或系统),它们位于控制面板中的系统图标、高级系统设置任务、高级选项卡、环境按钮下。
关于InterfaceError: Unable to acquire Oracle environment handle,这特别发生在与不解析 OCI.dll 相对的情况下,cx_Oracle 不知道要使用哪个 OCI.dll,通常是这种情况,因为 PATH 变量包含两个或多个搜索目录,其中包含OCI.dll。
具体确保您的 PATH 仅包含来自即时客户端安装或 Oracle 11G XE 安装的一个即时 OCI.dll 应该可以解决您的问题。
您是否在安装 Oracle 11G XE 之前卸载了即时客户端?
将以下内容粘贴到命令提示符中。
echo The current ORACLE_HOME is %ORACLE_HOME%
echo The current TNS_ADMIN is %TNS_ADMIN%
echo The current PATH is %PATH%
查看这些变量的当前值。
更多资源