gpt4 book ai didi

python - AWS Glue Python Shell 与 Oracle cx_Oracle 的连接问题

转载 作者:行者123 更新时间:2023-12-01 07:22:57 26 4
gpt4 key购买 nike

我正在开发 AWS Glue Python Shell。我想将 python shell 与 Oracle 连接。我成功安装了 psycopg2 和 mysql 库,但是当我尝试使用 cx_Oracle 连接 Oracle 时,我已经成功安装了该库,但遇到了错误

DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory"

我尝试过以下操作

  1. 我已从 S3 下载了 so 文件,并将其与代码文件并行放置在 lib 文件夹中

  2. 我已使用 os.environ 设置 LD_LIBRARY_PATH、ORACLE_HOME

我正在使用以下代码

import boto3
import os
import sys
import site
from setuptools.command import easy_install

s3 = boto3.client('s3')
dir_path = os.path.dirname(os.path.realpath(__file__))
#os.path.dirname(sys.modules['__main__'].__file__)

install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "cx_Oracle"] )

importlib.reload(site)

import cx_Oracle

conn_str = u'{username}/{password}@{host}:{port}/{sid}'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(u'select * from hr.countries')
for row in c:
print(row[0], "-", row[1])
conn.close()
print('hello I am here');

我应该能够在 awsglue python shell 上与 oracle 连接

最佳答案

正如回复中已经提到的那样。 LD_LIBRARY_PATH需要在脚本启动之前设置。因此,有一种避免使用 LD_LIBRARY_PATH 的方法正在设置rpathso文件。以下是所需的步骤。

您需要更新rpath在你的so文件。这可以使用 patchelf 来完成包裹。

请同时附上您的 libaio.so.1在你的so您可能通过运行 sudo apt-get install libaio1 生成的文件

安装 patchelf

sudo apt-get update
sudo apt-get install patchelf

更新rpath到你的lib目录

patchelf --set-rpath <absolute_path_to_library_dir> libclntsh.so

上传so文件已更新 rpath到你的glue env lib目录。

然后您可以在脚本中加载该库。

from ctypes import *
cdll.LoadLibrary('<absolute_path_to_library_dir>/libclntsh.so')

关于python - AWS Glue Python Shell 与 Oracle cx_Oracle 的连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com