您运行的是哪个版本的 Windows?它是 32 位还是 64 位?
您的 Oracle Instant Client 是32位还是64位?
你的 Python 安装是32位还是64位?
你的 cx_oracle 是正确的版本吗?32位还是64位?
MSVCR90.dll 是 Microsoft Visual C++ 2008 SP1 Redistributable 包的一部分。
这里有 32 位版本,这里有64 位版本。
如果您C:\Program Files\Internet Explorer\Ieshims.dll
的版本为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%
查看这些变量的当前值。
更多资源