找不到Python模块“cx_Oracle”模块

时间:2012-09-21 21:13:35

标签: python oracle module cx-oracle

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

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

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

  

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

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

任何人都可以帮助我吗?提前谢谢。

4 个答案:

答案 0 :(得分:10)

# - 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只需在命令行上以交互模式运行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。正确设置env vars。
    • ImportError: DLL load failed: %1 is not a valid Win32 application:您的32/64位不匹配。

答案 1 :(得分:8)

是的,您必须安装Oracle客户端。

来自cx_ORacle README

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

编辑指向Instant Client的链接:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

答案 2 :(得分:2)

在试图解决这个问题好几天后,我发现set PATH=%PATH%:<insert Oracle home here>没有为我做这个伎俩。我必须进入我的Windows XP系统属性并将Oracle主目录附加到'系统变量'下的'path'变量。

答案 3 :(得分: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-&gt; Advanced System Properties-&gt; Environment Variables-&gt; System Variables)。