Python: 导入cx_Oracle时出现ImportError: No module named cx_Oracle错误

17

我尝试编写一个.py脚本用于Oracle连接:

#!/usr/bin/python

import cx_Oracle

connstr='username/pwd@database'
conn = cx_Oracle.connect(connstr)
curs = conn.cursor()

curs.execute('select * from table1;')
print curs.description
for row in curs:
   print row
conn.close()

我遇到了以下错误:

Traceback (most recent call last):
  File "test_SQLPython.py", line 3, in ?
    import cx_Oracle
ImportError: No module named cx_Oracle

有任何帮助将不胜感激。谢谢。


1
cx_Oracle.py 位于哪里?它可能在您的 Python PATH 中未列出的某个地方。 - Niek de Klein
11个回答

23

尝试按照上面的答案中提供的rpm安装,但没有成功。实际有效的方法是使用普通的 pip install

pip install cx_oracle

上述命令安装了cx_oracle=6.1。 请注意,我正在使用python 2.7.14 Anaconda releaseoracle 12c


5

Windows帮助:

  1. 这里获取即时客户端。
  2. 将该目录添加到您的PATH变量中。
  3. 进入命令提示符(Win+R并输入cmd),并设置两个与您位置匹配的变量-例如:

    set TNS_ADMIN=C:\instant_client\instantclient_11_2 set ORACLE_HOME=C:\instant_client\instantclient_11_2

然后从exe文件安装cx_Oracle模块。 如果使用pip或easy_install,则...祝你好运。

您可以在此处获取安装程序:https://pypi.python.org/pypi/cx_Oracle/5.1.3


1
你能再解释一下吗?比如说,你所说的“即时客户端”是什么意思? - Alois Mahdal
“insta clients” 可在此处下载:https://www.oracle.com/database/technologies/instant-client/downloads.html。 - Boern

3

我的问题是我通过DOS pip安装了cx_Oracle,这导致它变成了小写。相反,通过Git Bash安装可以保留大小写。


就是这样。我使用“pip install cx_Oracle”重新安装了,大写字母'O',它成功导入了。谢谢,MrDBA。 - Searcherer

3

在我的情况下,解决方案是使用:

python3 -m pip install cx_Oracle --upgrade --user

代替
pip3 install cx_Oracle

这是由于 pip 某些问题导致的,因此我没有正确安装 cx_Oracle

# python3 -m pip -V 
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

# pip3 -V
pip 21.2.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

我希望这能为某人节约几小时的生命...


2

我有一个类似的问题,你需要确保你拥有以下内容:

  1. Oracle即时客户端
  2. cx_Oracle 二进制文件(从 SourceForge 获取)
  3. Python 重要提示:确保它们全部是64位或32位,混用会导致问题

2
尽管这是一个愚蠢的错误,但请确保使用正确的模块名称并遵守大小写规则。
我在Windows机器上通过命令行安装了这个包:pip install cx_oracle。但是,在Spyder中导入cx_oracle时,一直出现以下错误: ModuleNotFoundError: No module named 'cx_oracle'
将导入命令中的模块名称更正为cx_Oracle(即Oracle中的大写字母'O'),成功导入。

2
我刚刚遇到了同样的问题。首先,您需要为您的操作系统安装适当的Oracle客户端。在我的情况下,我遵循了这些说明,在Ubuntu x64上安装它。https://help.ubuntu.com/community/Oracle%20Instant%20Client#Install_RPMs 然后,您需要安装cx_Oracle,它是用于连接Oracle客户端的Python模块。再次假设您在64位机器上运行Ubuntu,则应在shell中键入:
wget -c http://prdownloads.sourceforge.net/cx-oracle/cx_Oracle-5.0.4-11g-unicode-py27-1.x86_64.rpm
sudo alien -i cx_Oracle-5.0.4-11g-unicode-py27-1.x86_64.rpm

如果您安装了Python 2.7.x,则此方法适用于Oracle 11g,但您可以在http://cx-oracle.sourceforge.net/下载不同的cx_Oracle版本。 要检查您的Python版本,请在终端中输入:
python -V

我希望这能有所帮助。


所以客户端/驱动程序不包含在cx_Oracle模块本身中? - Ewoks

2

Windows和Anaconda帮助

Anaconda 4.3.0自带Python 3.6作为根环境。目前cx_Oracle仅支持到3.5版本。我尝试在envs中创建3.5环境,但运行cx_Oracle-5.2.1-11g.win-amd64-py3.5.exe时,它只能安装在根环境下的3.6版本。

唯一的解决方法是将根环境从3.6更改为3.5:

activate root
conda update --all python=3.5

当安装完成后,请运行cx_Oracle-5.2.1-11g.win-amd64-py3.5.exe。

使用import进行测试,结果良好。

import CX_Oracle

1
我目前有一个conda环境,使用Python3.6和cx_Oracle工作(仅在Pycharm中而不是ipython),因此这可能与帖子中的情况有所不同。 - Back2Basics

1

有一位来自Windows的Unknown92给了我帮助。

请注意,所有版本都必须匹配。

我已经在这里下载了 cx_Oracle,对我而言,文件cx_Oracle-5.2.1-12c.win-amd64-py3.5.exe适用于:

  • Python 3.5.1 64位。由于某种原因,主页上默认的下载链接是32位版本。
  • Oracle实例客户端12.1.0.2.0(名为instantclient-basic-windows.x64-12.1.0.2.0.zip)here

1
太棒了!安装 Oracle lib,请向下滚动页面并阅读“安装”部分。 - JRr
我在想,文件名看起来只适用于 AMD 处理器的 64 位!我正在使用 Python 3.5 + Oracle 11g + Intel Xeon 64 位处理器。6.1 是最新版本。即使现在,Intel 64 位处理器仍未包括在内。https://pypi.python.org/pypi/cx_Oracle/6.1引用自此处:http://cx-oracle.readthedocs.io/en/latest/installation.html#installing-cx-oracle-on-windows如果您的架构有可用的预编译二进制文件,则会下载并安装预编译二进制文件。如果没有可用的预编译二进制文件,则会下载源代码,编译并安装生成的二进制文件。 - JGFMK

1

要从Python访问Oracle,您需要(另外)cx_Oracle模块。该模块必须位于系统Python路径中,或者您必须设置适当的PYTHONPATH。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接