【问题标题】:Python module "cx_Oracle" module could not be found找不到 Python 模块“cx_Oracle”模块
【发布时间】:2016-08-11 12:07:55
【问题描述】:

我最近在我的机器上安装了 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 load failed: 找不到指定的模块。

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

谁能帮帮我?提前致谢。

【问题讨论】:

    标签: python oracle module cx-oracle


    【解决方案1】:
    # - 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:查看下载文件的名称。
    • 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 位不匹配。
  • 【讨论】:

    【解决方案2】:

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

    来自cx_ORacle README

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

    EDIT 链接到 Instant Client:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

    【讨论】:

    • 感谢您的回复,这真的很有帮助。在那之后,当我将脚本移动到另一个安装了 X64 版本 Oracle 的环境中时,另一个问题很突出,脚本失败了。我做了一些研究,发现可能是由于oracle客户端是64位,而python版本是32位。
    • 解决了上述问题,方法是使用“虚拟”32 位 Oracle 客户端,并将环境变量“ORACLE_HOME”正确设置到虚拟客户端路径。
    • 是的,oracle 客户端和 Python 必须在位上匹配才能协同工作。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我还不能评论 :-( 但是对于上面的 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 路径(通过系统->高级系统属性->环境变量->系统变量)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        • 2017-12-10
        • 2013-11-09
        • 2018-02-21
        • 2017-05-18
        • 2015-03-12
        • 2021-10-13
        相关资源
        最近更新 更多