【问题标题】:Installing the Python cx_Oracle module in Windows and connecting to an Oracle database在 Windows 中安装 Python cx_Oracle 模块并连接到 Oracle 数据库
【发布时间】:2017-02-27 21:16:42
【问题描述】:

我一直在尝试安装和设置它,尽管有几个链接描述了如何做到这一点,但我只是没有让它工作。我将首先描述设置:

  • 我的电脑:Windows 8.1 企业版(62 位)
  • 远程服务器:Oracle DB 版本 12.1.0.2
  • C:\Users\Pymat\Oracle\instantclient_12_1 这里是oraocci12.dll 所在的位置,以及其他文件夹和文件
  • C:\Users\Pymat\AppData\Local\Continuum\Anaconda3 这是python.exe 所在的位置(即os.path.dirname(sys.executable)) 在脚本中,我有print (sys.version),它给出: 3.6.0 |Anaconda 4.3.0 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)]

我一直参考hereherehereherehere的说明。

问题 1: 哪个是cx_Oracle 的正确下载? 我从here 转到cx_Oracle 5.2.1 并下载:

cx_Oracle-5.2.1-12c.win-amd64-py3.5.exe (md5)
cx_Oracle-5.2.1-12c.win32-py3.5.exe (md5)

目前尚不清楚其中哪一个是要下载的正确.exe(或者两者都正确)。无论如何,我使用 12c 来保持版本与 Oracle DB 版本一致,尽管在整个过程中似乎无论如何都没有与远程服务器上的 Oracle DB 交互。

问题 2:cx_Oracle 是否正确下载或实际上丢失了?

在以下路径下:

C:\Users\Pymat\AppData\Local\Continuum\Anaconda3\Lib\site-packages

我发现:

cx_Oracle.cp35-win_amd64.pyd
cx_Oracle.cp35-win32.pyd

但是我在此目录(或任何其他目录)下找不到cx_Oracle,例如Verion-5.1.2-11g.win32-py2.7,根据here。我怀疑定位 cx_Oracle 模块存在问题。另见问题 5

问题 3:我的环境变量配置正确吗?

(i) 当我在 Windows 中使用 GUI 检查 here 之类的变量时,我看到了:

ORACLE_HOME
C:\Users\Pymat\Oracle\instantclient_12_1;
C:\Users\Pymat\Oracle\instantclient_12_1\vc12

PATH
C:\Users\Pymat\AppData\Local\Continuum\Anaconda3;
C:\Users\Pymat\AppData\Local\Continuum\Anaconda3\Scripts;
C:\Users\Pymat\AppData\Local\Continuum\Anaconda3\Library\bin;
C:\Users\Pymat\Oracle\instantclient_12_1;

注意:ORACLE_HOME 末尾缺少分号。对吗?

(ii) 当我在命令中使用C:\Users\Pymat>echo %PATH% 时:

C:\ProgramData\Oracle\Java\javapath;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\Users\Pymat\.dnx\bin;
C:\Program Files\Microsoft DNX\Dnvm\;
C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;
C:\Users\Pymat\AppData\Local\Continuum\Anaconda3;
C:\Users\Pymat\AppData\Local\Continuum\Anaconda3\Scripts;
C:\Users\Pymat\AppData\Local\Continuum\Anaconda3\Library\bin;
C:\Users\Pymat\Oracle\instantclient_12_1;

(iii) 当我进入 Python shell 并使用 sys.path:

'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\python36.zip', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\DLLs', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\lib', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\Sphinx-1.5.1-py3.6.egg', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\win32', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\win32\\lib', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\Pythonwin', 
'C:\\Users\\Pymat\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\setuptools-27.2.0-py3.6.egg'

问题 4: 即时客户端下载,哪些下载实际上是必不可少的?

在 Oracle 上注册后,我从 here 下载版本 12.1.0.2 下的“Instant Client Package - Basic”“Instant Client Package - SDK”。有些网站没有提到SDK包,但我还是下载了。

这些已下载到我的 PC(不是 Oracle DB 所在的位置)。

问题 5:为了测试是否安装成功,我进入 Python shell 并使用:

import os
os.chdir("C:\\Users\\Pymat\\Oracle\\instantclient_12_1")
import cx_Oracle

然后我得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cx_Oracle'

为什么这一步不起作用?

问题6:我无法在Eclipse中正确使用Console,但是Command中的Python shell可以工作,为什么?

当我点击“PyDev Console”,然后点击“Python Console”,我得到:

'Create Interactive Console' has encountered a problem
Error initializing console

这有点让人头疼,虽然我还是个 Python 新手,但我认为这个安装过程可能会容易得多。欢迎任何建议。

【问题讨论】:

  • 嗨!有趣的话题!问题列表在这里没有多大意义!请拆分您的问题以回答每个问题!另见How to Ask!谢谢!
  • 嗨,我已经把问题分开了。其中有六个,都与安装问题的一个主题有关,因此彼此相关。谢谢。
  • 我不同意。我在一个Stack Overflow 问题中看到您提出的 6 个具体问题。此处暂不讨论!
  • 好吧,我们同意不同意。

标签: python oracle cx-oracle


【解决方案1】:

长话短说:现在降级到 Python 3.5,Python 3.6 的二进制文件将在下一个 cx_Oracle 版本中构建。


长版:

在脚本中,我有 print (sys.version),它给出:3.6.0 [...]

我发现:

cx_Oracle-5.2.1-12c.win-amd64-py3.5.exe (md5)
cx_Oracle-5.2.1-12c.win32-py3.5.exe (md5)

这些安装程序适用于 Python 3.5(请参阅其名称中的 py3.5)。二进制 Python 模块不一定与主要 Python 版本之间的 API 兼容,这就是为什么它们的文件名是特定于版本的。

目前还没有适用于 Python 3.6 的官方 cx_Oracle 二进制文件。一次cx_Oracle 5.3 is released, it will include Windows installers for Python 3.6 as well (issue #45)

那里有won't be official Python 3.6 installers for current cx_Oracle version 5.2.1 (see issue #50)

同时,according to Jani Tiainen from the mailing lists, it shouldn't be difficult to build the binaries yourself -- 但我自己从未尝试过:

我认为您只需要从 Microsoft 下载 Visual C++ 14 (2015) [1] 和来自 Oracle [2] 的 Instant Client 库。那么你应该能够 自己编译。

请注意,Instant Client 还需要 SDK 库。

[1]http://landinghub.visualstudio.com/visual-cpp-build-tools

[2]http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

【讨论】:

  • 也不要使用 Anaconda,使用来自 python.org 的官方 Python(cx_Oracle 二进制文件是针对官方 Python 构建的,可能根本无法与 Anacoda 一起使用)
【解决方案2】:

谢谢你,我相信我现在正在路上。我安装了 Visuakl C++,降级 Python 版本有所帮助,但还有一些问题。

  1. 使用pip install cx_Oracle 最初给出:

    要求已经满足:c:\users\Pymat\appdata\local\programs\python\python35\lib\site-packages 中的 cx_Oracle

但是在我的脚本中使用以下内容后,问题就消失了:

os.chdir("C:\\Oracle\\instantclient_12_1")
import cx_Oracle

唯一的小问题是导入用红色下划线,尽管它现在可以工作了。

  1. 我在我的脚本中使用:

    print("Python 版本:" + platform.python_version()) print ("cx_Oracle 版本:" + cx_Oracle.version) print ("Oracle 客户端:" + str(cx_Oracle.clientversion()).replace(', ','.')) print ("Oracle 数据库版本:" + connection.version) print("Oracle 客户端编码:" + connection.encoding)

导致:

Python version: 3.5.3
cx_Oracle version: 5.2.1
Oracle client: (12.1.0.2.0)
Oracle DB version: 12.1.0.2.0
Oracle client encoding: US-ASCII

另外一点,我最后卸载了anaconda。我可能需要 Anaconda 中的一些库,因此不确定是否在将来重新安装和使用 Python 可能会有所帮助。目前,它可以在没有它的情况下工作。

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多