Python模块"cx_Oracle"未找到。

11

我最近在我的计算机上安装了cx_Oracle模块,以便连接到远程的Oracle数据库服务器。(我没有在本地安装Oracle客户端)。

  • Python版本:2.7 x86
  • Oracle版本:11.1.X x64
  • Cx_Oracle版本:Verion-5.1.2-11g.win32-py2.7

每次运行我的脚本时,它都会失败并打印以下消息:

ImportError: DLL加载失败:指定的模块无法找到。

我在这里找到了一个相关的帖子,所以我想知道是否必须在调用python脚本的本地安装Oracle客户端。

有谁能帮我吗?提前感谢。

4个回答

11
# - This import requires appropriate oraocciXX.dll to be available in PATH (on windows)
#   (Probably LD_LIBRARY_PATH or LD_LIBRARY_PATH64 on POSIX)
#     where XX is the oracle DB version, e.g. oraocci11.dll for Oracle 11g.
# - This dll is part of the Oracle Instant client pkg available here:
#     http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
# - Also ensure that python, cx_Oracle and Oracle Client are of same arch (32 or 64-bit)
#
import cx_Oracle

您可以找到以下程序的体系结构(32位或64位):

  • Python: 只需在命令行中以交互模式运行Python即可。
  • cx_Oracle: 查看已下载文件的名称。
  • Oracle Client:
    • 运行客户端包中的sqlplus
    • 启动任务管理器并查看sqlplus.exe旁边是否有“* 32”(=32位)或没有(= 64位)
    • 如果没有sqlplus,请使用dumpbin /headers oraocciXX.dll
  • 如果您使用POSIX,您可能已经知道。使用file oraocciXX.so

最后,如果您仍然不了解,请按照以下说明操作:

  • 确保您已安装python、cx_Oracle和Oracle Instant Client的32位版本。它们也可以是64位的,但必须相同。不能混合使用。链接:
  • 在Windows中:
    • set PATH=%PATH%;C:\ProgFiles\OraClient\11_2
  • 在POSIX(Linux / Unix / Solaris ...)中 <-- 未经测试。。
    • export LD_LIBRARY_PATH=/path/to/your/32bit/oraocciXX.so
    • (64位) export LD_LIBRARY_PATH64=/path/to/your/64bit/oraocciXX.so
  • 运行path-to-python/python.exe -c "import cx_Oracle"来测试您的设置是否正常工作。
    • 如果它没有输出,则表示安装成功。
    • ImportError: DLL load failed: The specified module could not be found: 那么oraocciXX未被发现。请正确设置环境变量。
    • ImportError: DLL load failed: %1 is not a valid Win32 application: 您的32/64位不匹配。

要检查二进制文件(dll或exe)是32位还是64位,您也可以使用SysInternals的sigcheck。更多信息请参见http://superuser.com/a/808127/283407。 - DocZerø

8

谢谢您的回复,非常有帮助。在将我的脚本移植到安装了X64版本Oracle的另一个环境中后,出现了另一个问题,即脚本无法运行。我进行了一些研究,并发现可能是因为Oracle客户端是64位的,而Python版本是32位的原因。 - Chen Xie
1
通过设置一个“虚拟”的32位Oracle客户端,并正确设置环境变量“ORACLE_HOME”为虚拟客户端的路径,解决了上述问题。 - Chen Xie
2
是的,Oracle客户端和Python必须匹配位数才能一起使用。 - John Gaines Jr.
请查看以下链接,也许对您有帮助:https://dev59.com/cWIj5IYBdhLWcg3wilgI - user584583

2

经过多日的尝试,我发现set PATH=%PATH%:<插入Oracle home路径>并不能解决我的问题。我需要进入Windows XP系统属性,在“系统变量”下的“path”变量中添加Oracle home路径。


0

我还不能发表评论 :-( 但是针对上面的uniquephase,您可能需要检查.exe和.dll文件的权限,以确保它们可以执行?

所以,我需要做以下步骤才能使其正常工作。

从这里解压即时客户端。 http://www.oracle.com/technetwork/topics/winx64soft-089540.html

chmod +x *.exe *.dll(我正在使用cygwin)。

为了完整起见,我无法使用cygwin通过pip安装cx_oracle。

因此,我不得不使用标准的dist python(非cygwin),并通过Windows安装程序安装了cx_oracle。

此外,我还必须将f:/opt/instantclient_12_1(我安装Oracle即时客户端的位置)添加到Windows路径中(通过System->高级系统属性->环境变量->系统变量)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接