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

时间:2019-05-13 20:29:25

标签: python python-3.x windows-10 cx-oracle

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

DatabaseError:DPI-1047:无法找到64位Oracle Client库:“找不到指定的模块”。请参见https://oracle.github.io/odpi/doc/installation.html#windows以获取帮助

8 个答案:

答案 0 :(得分:6)

最简单的解决方案如下:

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

enter image description here

enter image description here

就是这样!

答案 1 :(得分:4)

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

以下是我解决该问题的 步骤

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

可以在here中找到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()  

这时,我收到错误消息,指出无法找到库。解决方法如下:

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)

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

当前(2020年11月)standard传递用于Windows的Oracle库的位置的方法是cx_Oracle.init_oracle_client(lib_dir= "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);

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

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

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

以下方法可行,但现在首选使用cx_Oracle.init_oracle_client(lib_dir= "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"]

答案 2 :(得分:2)

我建议您首先检查OS,Python和Oracle Instant Client体系结构的兼容性:

import platform
platform.architecture()

然后,我绝对建议您在jupyter笔记本中设置Oracle Instant Client:

import os
os.environ["PATH"] = "Complete Location of Instant Client Folder" + ";" + os.environ["PATH"]

答案 3 :(得分:2)

根据 cx_Oracle page 上访问的文档。

第一步:安装cx_Oracle

python -m pip install cx_Oracle --upgrade

第 2 步:下载并解压 Oracle 基本客户端

对于 Windows 下载并提取 Oracle Basic 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")

现在您将摆脱错误。

答案 4 :(得分:1)

我在 Anconda Spyder 中遇到了这个错误。

我就是这样解决的。

  1. 从以下位置获取基本包 InstantClient:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

  2. 提取并复制所有 *.dll 文件,然后将其粘贴到您有 python.exe 的 Anaconda3 文件夹中。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

确保已安装正确的oracle客户端(您可以从此处“ https://www.oracle.com/in/database/technologies/instant-client/winx64-64-downloads.html找到oracle客户端软件包,然后将已下载的文件夹添加到安装python的文件夹中,然后添加此位置(您的位置客户端程序包文件夹)到系统的环境变量。 希望能奏效。

答案 7 :(得分:0)

对于MAC

完成后:python -m pip install cx_Oracle --upgrade

试试:

import cx_Oracle
# 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()  

如果您遇到以下问题:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "dlopen(libclntsh.dylib, 1): image not found". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

按照此处突出显示的步骤进行操作:https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#manual-installation

手动安装

  1. 从 Oracle 下载基本 64 位 DMG。 (https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html)

  2. 安装 dng

  3. 打开挂载的 dng,然后运行 ​​./install_ic.sh(通过终端) 例如:cd /Volumes/instantclient-basic-macos.x64-19.8.0.0.0dbru/ && ./install_ic.sh

  4. 在 Finder 中,弹出安装的 Instant Client 包。

重新运行 oracle 连接。

import cx_Oracle

cx_Oracle.init_oracle_client(lib_dir="/Users/priyank.pathak/Downloads/instantclient_19_8")
## cx_Oracle.init_oracle_client(lib_dir="/Users/your_username/Downloads/instantclient_19_8")

cx_Oracle.clientversion()