- 准备工作:安装 Oracle 客户端
- 安装 cx_Oracle 模块
- 验证安装
- 常见问题与解决方案
第 1 步:准备工作 - 安装 Oracle 客户端
这是最关键的一步。cx_Oracle 本身不包含与 Oracle 数据库通信所需的底层库,它需要依赖 Oracle 客户端软件来处理网络连接和协议。

您有两种主要的选择来安装客户端:
选择 A:推荐 - 使用 Oracle Instant Client (轻量级)
这是最常用、最简单的方法,特别是对于开发环境,Instant Client 是一个轻量级的、免费的 Oracle 客户端库,它不包含安装程序或管理工具,只提供运行应用程序所需的最小文件。
下载 Instant Client
- 访问 Oracle Instant Client 下载页面:https://www.oracle.com/database/technologies/instant-client/downloads.html
- 根据您的操作系统选择对应的版本:
- Windows: 选择 "Instant Client for Windows"。
- macOS: 选择 "Instant Client for macOS"。
- Linux: 选择 "Instant Client for Linux x86-64"。
- 您需要下载基本的包,
instantclient-basic-windows.x64-<version>.zip(Windows)instantclient-basic-macos.x64-<version>.zip(macOS)oracle-instantclient-basic-<version>-1.x86_64.rpm(Linux, for Red Hat/CentOS/Fedora)oracle-instantclient-basic_<version>-1_amd64.deb(Linux, for Debian/Ubuntu)
解压并配置路径

-
Windows:
- 将下载的
.zip文件解压到一个固定的目录,C:\oracle\instantclient_19_10(版本号可能不同)。 - 将该目录添加到系统的 PATH 环境变量中,这样 Python 才能找到这些库文件。
- 右键点击 "此电脑" -> "属性" -> "高级系统设置" -> "环境变量"。
- 在 "系统变量" 中找到
Path变量,点击 "编辑"。 - 点击 "新建",然后添加您的解压目录路径,
C:\oracle\instantclient_19_10。 - 确保所有窗口都点击 "确定" 保存。
- 将下载的
-
macOS / Linux:
- 将下载的文件(如
.zip或.dmg)解压到一个合适的目录,/opt/oracle/instantclient或您家目录下的~/instantclient。 - 将该目录添加到
LD_LIBRARY_PATH(Linux) 或DYLD_LIBRARY_PATH(macOS) 环境变量中。- 临时设置 (当前终端会话有效):
export LD_LIBRARY_PATH=/path/to/your/instantclient:$LD_LIBRARY_PATH
- 永久设置 (推荐):
将上述
export命令添加到您的 shell 配置文件中(~/.bashrc,~/.zshrc或/etc/profile)。
- 临时设置 (当前终端会话有效):
- 将下载的文件(如
选择 B:使用完整的 Oracle 客户端或数据库安装
如果您已经安装了完整的 Oracle 数据库(如 Oracle 19c, 21c)或在服务器上安装了 Oracle 客户端,Instant Client 通常已经包含在内,或者您可以直接指向其安装路径,在 Linux 上,路径通常是 /usr/lib/oracle/19.3/client64/lib。
第 2 步:安装 cx_Oracle 模块
当 Oracle 客户端正确配置后,安装 cx_Oracle 就非常简单了。

使用 pip 安装 打开您的命令行工具(CMD, PowerShell, Terminal 等),运行以下命令:
pip install cx_Oracle
如果您的系统中有多个 Python 版本,建议使用 pip3 或指定 Python 解释器:
python3 -m pip install cx_Oracle
安装过程说明
pip 会从 PyPI 下载预编译的 wheel 文件(.whl)。pip 找不到与您的 Python 版本和操作系统匹配的预编译包,它会尝试从源代码编译。从源代码编译需要您系统上已安装 C 编译器(如 GCC 或 MSVC)和相关的开发头文件,这可能会很复杂,确保使用预编译的 wheel 是最好的方式。
第 3 步:验证安装
安装完成后,写一个简单的 Python 脚本来验证一切是否正常。
测试基本导入
确保 Python 能够找到 cx_Oracle 模块。
import cx_Oracle
print("cx_Oracle version:", cx_Oracle.version)
如果这个脚本可以成功运行并打印出版本号,说明 cx_Oracle 模块本身已经安装成功。
测试数据库连接 您需要一个 Oracle 数据库的连接信息(用户名、密码、数据库名/服务名/数据源名称)。
- DSN (Data Source Name): 格式通常是
<host>:<port>/<service_name>或<host>:<port>/<sid>。
创建一个测试脚本 test_oracle.py:
import cx_Oracle
import os
# --- 从环境变量获取连接信息 (推荐做法) ---
# 用户名
username = os.environ.get('ORA_USER')
# 密码
password = os.environ.get('ORA_PWD')
# 数据源名称 (主机:端口/服务名)
dsn = os.environ.get('ORA_DSN')
# --- 或者直接硬编码 (仅用于测试,不推荐在生产环境使用) ---
# username = "your_username"
# password = "your_password"
# dsn = "hostname:1521/service_name"
# 连接数据库
try:
# 创建连接
connection = cx_Oracle.connect(user=username, password=password, dsn=dsn)
# 创建一个游标对象
cursor = connection.cursor()
# 执行一个简单的 SQL 查询
print("Successfully connected to Oracle Database.")
cursor.execute("SELECT 'Hello, Oracle World!' AS message FROM DUAL")
# 获取并打印结果
for row in cursor:
print(row[0])
except cx_Oracle.DatabaseError as e:
# 捕获数据库错误
error, = e.args
print(f"Oracle Error {error.code}: {error.message}")
except Exception as e:
# 捕获其他错误 (如连接信息错误)
print(f"An error occurred: {e}")
finally:
# 确保连接被关闭
if 'connection' in locals() and connection:
connection.close()
print("Database connection closed.")
如何运行测试脚本:
-
设置环境变量 (推荐):
- Windows (CMD):
set ORA_USER=your_username set ORA_PWD=your_password set ORA_DSN=your_host:1521/your_service_name python test_oracle.py
- Windows (PowerShell):
$env:ORA_USER="your_username" $env:ORA_PWD="your_password" $env:ORA_DSN="your_host:1521/your_service_name" python test_oracle.py
- Linux / macOS:
export ORA_USER="your_username" export ORA_PWD="your_password" export ORA_DSN="your_host:1521/your_service_name" python3 test_oracle.py
- Windows (CMD):
-
直接修改脚本: 将您自己的用户名、密码和 DSN 直接填入脚本中,然后运行。
如果脚本成功打印出 "Hello, Oracle World!",那么恭喜您,cx_Oracle 已经完全配置好了!
第 4 步:常见问题与解决方案
-
ImportError: DLL load failed: 找不到指定的模块。(Windows)- 原因: 这是 Windows 上最常见的问题,通常是因为 Python 解释器找不到 Oracle Instant Client 的
.dll文件。 - 解决方案:
- 确认您已经将 Instant Client 的解压目录(如
C:\oracle\instantclient_19_10)添加到了系统的 PATH 环境变量中。 - 重启您的命令行窗口和 IDE(如 VS Code, PyCharm),因为环境变量的更改有时需要重启才能生效。
- 确保您下载的 Instant Client 版本(32位或64位)与您的 Python 版本一致,Python 3.3+ 通常是64位的,所以您需要 Instant Client 64位。
- 确认您已经将 Instant Client 的解压目录(如
- 原因: 这是 Windows 上最常见的问题,通常是因为 Python 解释器找不到 Oracle Instant Client 的
-
OSError: libclntsh.so: cannot open shared object file: No such file or directory(Linux/macOS)- 原因: 与 Windows 的问题类似,系统找不到 Oracle 的共享库文件。
- 解决方案:
- 确认您已经将 Instant Client 的目录添加到了
LD_LIBRARY_PATH(Linux) 或DYLD_LIBRARY_PATH(macOS) 环境变量中。 - 同样,重启您的终端或 IDE。
- 您可以使用
echo $LD_LIBRARY_PATH(Linux) 或echo $DYLD_LIBRARY_PATH(macOS) 命令来检查变量是否正确设置。
- 确认您已经将 Instant Client 的目录添加到了
-
pip install cx_Oracle失败,提示需要编译器- 原因:
pip找不到适合您平台的预编译包,试图从源码编译,但缺少编译工具链。 - 解决方案:
- 最佳方案: 尝试升级
pip和setuptools,然后重试,有时新的版本会提供更多的预编译包。python -m pip install --upgrade pip setuptools wheel pip install cx_Oracle
- 备选方案: 如果必须从源码编译,您需要安装 C 编译器。
- Windows: 安装 Microsoft C++ Build Tools。
- Ubuntu/Debian:
sudo apt-get update && sudo apt-get install build-essential python3-dev - CentOS/RHEL:
sudo yum groupinstall "Development Tools" && sudo yum install python3-devel
- 最佳方案: 尝试升级
- 原因:
-
ORA-12154: TNS:could not resolve the connect identifier specified- 原因: 这个错误不是
cx_Oracle的问题,而是 Oracle 客户端无法解析您提供的 DSN(数据源名称)。 - 解决方案:
- 检查您的 DSN 字符串是否正确,包括主机名、端口和服务名/SID。
- 确保数据库服务器正在运行,并且可以从您的客户端机器访问。
- 如果您的网络环境复杂,可能需要在客户端的
tnsnames.ora文件中配置 DSN,Instant Client 默认不包含此文件,但您可以从数据库服务器管理员处获取并放置在 Instant Client 目录下。
- 原因: 这个错误不是
希望这份详细的指南能帮助您顺利完成 cx_Oracle 的安装!
