11

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

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

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

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

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

谁能帮我吗?提前致谢。

4

4 回答 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

您可以找到 arch(32 位或 64 位):

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

最后如果你还是不明白这里真的是给傻瓜的说明:

  • 确保您已安装 32 位版本的 python、cx_Oracle 和 Oracle Instant Client。这些也可以是 64 位的,但所有 3 必须相同。不能混合和匹配。链接:
  • 视窗:
    • 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 位不匹配。
于 2013-10-23T21:05:21.540 回答
8

是的,您必须在身边安装一个 Oracle 客户端。

来自cx_ORacle 自述文件

“请注意,使用 cx_Oracle 需要安装 Oracle 客户端(或服务器)。如果您不需要完整客户端安装附带的工具,建议安装更容易安装的 Instant Client。 "

即时客户端的编辑链接: http ://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

于 2012-09-21T21:19:52.407 回答
2

在尝试解决这个问题好几天之后,我发现这set PATH=%PATH%:<insert Oracle home here>对我没有用。我必须进入我的 Windows XP 系统属性并将 Oracle 主页附加到“系统变量”下的“路径”变量。

于 2013-10-25T10:04:25.620 回答
0

我还不能评论:-(但是对于上面的 uniquephase,您可能想尝试检查 .exe 和 .dlls 的权限以确保它们是可执行的?

所以我需要做的步骤才能让它工作。

从这里解压缩即时客户端。 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 路径(通过系统->高级系统属性->环境变量->系统变量)。

于 2016-08-11T04:07:55.727 回答