cx_Oracle 错误。DPI-1047:找不到 64 位 Oracle 客户端库

Rex*_*ife 25 python cx-oracle python-3.x windows-10

我安装了该库,当尝试使用我的凭据在 jupyter notebook 中访问 SQL 时,出现以下错误:

数据库错误:DPI-1047:找不到 64 位 Oracle 客户端库:“找不到指定的模块”。请参阅 https://oracle.github.io/odpi/doc/installation.html#windows 寻求帮助

小智 27

最简单的解决方案如下:

  1. 从以下位置下载 64 位版本的 oracle InstantClient:https ://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
  2. 将instantclient目录下的dll文件复制到python目录下,如下图

在此处输入图片说明

在此处输入图片说明

这就对了!

  • @Naik:这是一个不好的做法。而是将库文件的位置传递给 Python,如 cx_Oracle [文档](https://cx-oracle.readthedocs.io/en/latest/user_guide/initialization.html#using-cx-oracle-init-oracle -client-to-set-oracle-client-directory)。详情请参阅下面我的回答。 (4认同)
  • 这非常有用。有没有一种简单的方法可以在 UNIX 中解决相同的问题? (3认同)
  • 在 Linux 上,您必须在 Python 进程启动之前设置库搜索路径(例如使用 ldconfig 或 LD_LIBRARY_PATH - 请参阅下载页面上的即时客户端安装说明) (2认同)
  • 使用 init_oracle_client(lib_dir=...) 可以在 Windows 和 macOS 上运行,但不能在 Linux 上运行。这是有记录的。 (2认同)

Sta*_*tan 15

简短的回答是: cx_Oracle.init_oracle_client(lib_dir= r"c:\path_to_libraries")

以下是我为解决同一问题而遵循的步骤

如果您尚未安装 cx_Oracle,则可以使用以下命令进行安装:
python -m pip install cx_Oracle --upgrade

可以在此处找到 cx_Oracle 文档。

使用以下命令验证是否已安装并识别所有内容:

import sqlalchemy as sqla
import pandas as pd
import cx_Oracle

# Test to see if it will print the version of sqlalchemy
print(sqla.__version__)    # this returns 1.2.15 for me

# Test to see if the cx_Oracle is recognized
print(cx_Oracle.version)   # this returns 8.0.1 for me

# This fails for me at this point but will succeed after the solution described below
cx_Oracle.clientversion()  
Run Code Online (Sandbox Code Playgroud)

在这一点上,我收到错误说无法找到库。这是解决方案:

import os
import platform

# This is the path to the ORACLE client files
lib_dir = r"C:\put_your_path_here\instantclient-basic-windows.x64- 19.9.0.0.0dbru\instantclient_19_9"

# Diagnostic output to verify 64 bit arch and list files
print("ARCH:", platform.architecture())
print("FILES AT lib_dir:")
for name in os.listdir(lib_dir):
    print(name)
Run Code Online (Sandbox Code Playgroud)

请务必更新lib_dir特定于您的安装的路径。如果您有正确的路径,您应该会看到所有 Oracle 文件的列表,例如:(adrci.exe、oci.dll、oci.sym 等)。这是 Python 需要能够找到 Oracle 驱动程序的位置。

当前(2020 年 11 月)传递适用于 Windows 的 Oracle 库的位置的标准方法是cx_Oracle.init_oracle_client(lib_dir= r"c:\path_to_libraries"). 下面是一个例子:

lib_dir = r"C:\put_your_path_here\instantclient-basic-windows.x64- 19.9.0.0.0dbru\instantclient_19_9"

try:
    cx_Oracle.init_oracle_client(lib_dir=lib_dir)
except Exception as err:
    print("Error connecting: cx_Oracle.init_oracle_client()")
    print(err);
    sys.exit(1);
Run Code Online (Sandbox Code Playgroud)

此时我可以运行以下错误而没有任何错误:

# This works after passing the lib_dir path
cx_Oracle.clientversion()    # For me it returns: (19, 9, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

已弃用 以下是临时更新 PATH 变量的方法:

以下工作,但cx_Oracle.init_oracle_client(lib_dir= r"c:\path_to_libraries")现在使用是首选方式。

import os   
# Manually append the location of the ORACLE libraries to the PATH variable
os.environ["PATH"] = lib_dir + ";" + os.environ["PATH"]
Run Code Online (Sandbox Code Playgroud)

  • 新的“标准”是使用 cx_Oracle 8 的 `init_oracle_client()` 而不是设置 PATH - 请参阅 https://cx-oracle.readthedocs.io/en/latest/user_guide/initialization.html (4认同)

小智 5

根据在cx_Oracle 页面上访问的文档。

第一步:安装cx_Oracle

python -m pip install cx_Oracle --upgrade
Run Code Online (Sandbox Code Playgroud)

步骤 2:下载并解压 Oracle Basic Client

对于Windows下载和提取甲骨文基本Instatnt客户instantclient-basic-windows.x64-19.9.0.0.0dbru.zip文件。

第 3 步:将 Instatnt 客户端位置通知 cx_Oracle 模块。

如果您坚持使用文档并将它们解压缩到c:\oracle文件夹中,那么您的脚本可能如下所示。

    import cx_Oracle
    cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_9")
Run Code Online (Sandbox Code Playgroud)

现在您将摆脱错误。


小智 0

可能您已经安装了 cx_Oracle Python 库。为了通过 jupyter Notebook 执行数据库连接,您需要安装 Oracle 客户端,而这正是您的场景中所缺少的。请按照以下链接中的步骤安装 Oracle 客户端,这将解决您的问题: https ://oracle.github.io/odpi/doc/installation.html#windows