【问题标题】:Deploying cx_Oracle in Windows在 Windows 中部署 cx_Oracle
【发布时间】:2013-12-26 15:31:54
【问题描述】:

我正在尝试在 python 中使用cx_Oracle 模块来访问远程数据库并在表中插入或删除行。顺便说一句,我已经下载了 oracle 即时客户端 11.1 以及 odbc 和 sqlplus 版本。我已经将环境变量ORACLE_HOMETNS_ADMIN 设置到了我在那里解压缩文件并将这个目录添加到PATH 变量的目录中。当我用谷歌搜索时,我认为应该有一些 .ora 文件,但我找不到它们。

我可以从命令行使用sqlplus 命令,但我的主要问题是我无法安装和使用cx_Oracle。我不想使用任何命令行脚本;我只想使用cx_Oracle 作为 API。

谁能给我一个完整的解释,我真的被困在那里了。这方面的所有文件都含糊不清。最好的问候。

编辑 1:

我用python setup.py installpython setup.py build --compiler=mingw32命令尝试了cx_Oracle的源码包。我没有再次收到 oracle 错误,但我收到了 command 'gcc' failed 错误。我尝试了 MinGW 编译器并编辑了环境变量 PATH 以包含 MinGW 安装目录(例如 C:\MinGW);我还安装了 Microsoft Visual C++(版本 2005、2008 和 2010);但我仍然得到错误。

编辑 2:

由于@jpmc26 提到了tnsnames.ora 文件,我决定补充一点,我已尝试制作tnsnames.orasqlplus.ora 文件并将它们放在目录C:\oracle\instant_client_11_1\network\admin 中;但是当我用谷歌搜索时,我意识到如果你使用cx_Oracle.connect(username, password, cx_Oracle.makedsn(ip, port, sid)) 命令,你可以跳过.ora 文件。 cx_Oracle.makedsn 将自己构建结构。

【问题讨论】:

标签: python windows oracle11g cx-oracle


【解决方案1】:

您可能想尝试一些pre-built binaries。不幸的是,安装程序是 MSI,因此无法使用 virtualenv 进行安装。

我相信您在 ora 文件中指的是 TNS 名称文件。如果是这样,它是具有特定格式的纯文本文件。这可能会有所帮助:http://www.orafaq.com/wiki/Tnsnames.ora。根据FAQ,Oracle 将在TNS_ADMIN 目录中查找文件tnsnames.ora。请注意,使用 TNS 名称文件可能是可选的。在许多情况下,您可以将通常放入 TNS 名称文件(例如(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=ORA11))))中的内容放在与 TNS 名称相同的位置。

欢迎来到甲骨文。祝你好运。你会需要它。 (是的,Oracle 的一切都这么复杂。)

【讨论】:

  • 是的,我实际上是指那个文件和另一个名为 sqlplus.ora 的文件(我刚刚在 Stack Overflow 的某个地方听说过),我已经阅读了文件并构建了它;我会将这些细节添加到问题中。但正如我用谷歌搜索的,当您使用cx_Oracle.connect(username, password, cx_Oracle.makedsn(ip, port, sid)) 时,不需要有tnsnames.ora 文件。 cx_Oracle 将自己制作结构。我目前的问题是关于 windows 模块的,如果你能帮忙的话。
  • @ZeinabAbbasi 预构建的二进制文件没有帮助?
  • 没有。它没有。但我通过从文件C:\Python27\Lib\distutils\cygwincompiler.py 中删除所有–mno-cygwin 表达式解决了这个问题。由于 GCC 已经删除了这个选项,它在这个文件中的存在会产生错误。
  • 其实我会尽快找到链接并发布答案。非常感谢您的关注。
【解决方案2】:

我尝试了很多方法最终解决了这个问题。既然我认为我应该写一个全面的答案,我会分别写我遇到的问题和他们的解决方案;希望它可以帮助别人。我还将问题的名称更改为适当的名称。以下是我在 Windows 7 - 32 位版本中安装 cx_Oracle 模块时所经历的(我认为其他版本的 windows 会有类似的解决方案,但我不确定):

  • 我尝试使用easy_install 安装cx_Oracle,我得到了 错误No oracle client installed。我已经下载了oracle 用于 Windows 的基本即时客户端和 oracle sdk 即时客户端 Oracle官网并按照以下步骤安装:

    将oracle基本即时客户端解压到目录C:\oracle\instant_client_11_1\

    解压oracle sdk Instant Client,将文件夹sdk复制到C:\oracle\instant_client_11_1\目录下,得到C:\oracle\instant_client_11_1\sdk\目录。

    C:\oracle\instant_client_11_1\ 添加到PATH 环境变量的末尾。

    添加一个名为ORACLE_HOME 的新变量,并为该值设置C:\oracle\instant_client_11_1\

    重启电脑。

  • 我尝试再次使用easy_install 安装cx_Oracle,我得到了 错误command ‘gcc’ failed: no such file or directory 和一些 案例unable to find vcvarsall.bat;这是因为我没有 一个 C++ 编译器,所以我按照以下步骤来解决它:

    下载 Microsoft Visual C++ 并安装。

    下载MinGW并安装;请注意,您必须安装 GCC 模块。

    C:\MinGW\C:\MinGW\bin\(包含gcc.exe)添加到PATH 环境变量的末尾。

  • 我尝试再次使用easy_install 安装cx_Oracle,我得到了 错误command ‘gcc’ failed with exit status 1;我尝试了这一步 解决它:

    打开文件C:\Python27\Lib\distutils\ cygwincompiler.py 并删除此文件中所有出现的–mno-cygwin;这是因为GCC 的最新版本已删除–mno-cygwin 选项,它不应该存在。

  • 我尝试使用easy_install 安装cx_Oracle,它成功了。

但在网上搜索时,我发现了一些可能有用的技巧:

  • 如果你得到错误no module named win32api,那是因为你没有 在您的计算机上安装 python 的 win32 扩展,您应该 从Source Forge 下载pywin32 模块 并安装它。

  • 如果还是没有成功,可以试试老版本的cx_Oracle;但请记住我们在上述几行中谈到的所有内容。你可以找到cx_Oraclehere的所有版本。

  • 如果你想使用sqlplus,你也应该做一些其他的步骤。为此请搜索互联网。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 2018-02-16
    • 1970-01-01
    • 2016-02-23
    • 2012-09-09
    • 2017-06-08
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多