我使用Docker容器安装了JupyterHub。
我将甲骨文instantclient-basic-linux.x64-21.1.0.0.0.zip从 InstantClient https://www.oracle.com/uk/database/technologies/instant-client/linux-x86-64-downloads.html下载到本地计算机,并将压缩文件上传到JupyterHub工作目录.
在朱庇特笔记本中的
从shutil导入unpack_archive #解压缩ZIP-文件到工作目录(/home/jovyan/实例化客户端21_1/)unpack_archive '') >>>>不返回警告/错误
从os导入路径path.exists("/home/jovyan/instantclient_21_1") # >>>>导入os.path返回真实的
导入os os.environ"LD_LIBRARY_PATH“= "/home/jovyan/instantclient_21_1”!echo $LD_LIBRARY_PATH # >>>>返回$LD_LIBRARY_PATH
/home/jovyan/instantclient_21_1 os.environ"ORACLE_HOME“=”/home/jovyan/实例化客户端21_1“!回声$ORACLE_HOME # >>>>返回$ORACLE_HOME
!mamba安装libaio -y # >>>>不返回警告/错误
导入cx_Oracle # >>>>不返回警告/错误
在调用
cx_Oracle.init_oracle_client(lib_dir=r"/home/jovyan/instantclient_21_1")

我遗漏了什么?
PS:不幸的是,我在JupyterHub终端没有sudo权限.

发布于 2021-03-25 11:23:25
我最终通过从JupyterHub定制Dockerfile来创建一个新的https://github.com/jupyter/docker-stacks/blob/master/minimal-notebook/Dockerfile环境来解决这个问题,并将其嵌入JupyterHub中作为新的“最小Oracle环境”。
自定义Dockerfile包含以下内容(我只添加了"cx_Oracle安装开始/结束“部分):
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
ARG BASE_CONTAINER=jupyter/base-notebook
FROM $BASE_CONTAINER
LABEL maintainer="Jupyter Project <jupyter@googlegroups.com>"
USER root
# Install all OS dependencies for fully functional notebook server
RUN apt-get update && apt-get install -yq --no-install-recommends \
build-essential \
vim-tiny \
git \
inkscape \
libsm6 \
libxext-dev \
libxrender1 \
lmodern \
netcat \
# ---- nbconvert dependencies ----
texlive-xetex \
texlive-fonts-recommended \
texlive-plain-generic \
# ----
tzdata \
unzip \
nano-tiny \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# cx_Oracle installation begin
WORKDIR /opt/oracle
RUN apt-get update && apt-get install -y libaio1 wget
RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip && \
unzip instantclient-basiclite-linuxx64.zip && rm -f instantclient-basiclite-linuxx64.zip && \
cd /opt/oracle/instantclient* && rm -f *jdbc* *occi* *mysql* *README *jar uidrvci genezi adrci && \
echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig
RUN python -m pip install cx_Oracle
WORKDIR $HOME
# cx_Oracle installation end
# Create alternative for nano -> nano-tiny
RUN update-alternatives --install /usr/bin/nano nano /bin/nano-tiny 10
# Switch back to jovyan to avoid accidental container runs as root
USER $NB_UID在本地构建自定义Dockerfile并将其作为“最小Oracle环境”嵌入到Kubernetes集群中之后,我在新创建的JupyterHub环境中启动了一个新的朱庇特笔记本,并对ORACLE进行了如下测试:

发布于 2021-03-11 15:45:45
不幸的是,必须在启动进程之前设置环境变量LD_LIBRARY_PATH,因此在您的Python中更改它将无法工作。
此外,由于当前构建即时客户端的方式受到限制,如果不事先在进程之外设置cx_Oracle.init_oracle_client(),则无法在Linux上使用LD_LIBRARY_PATH。希望这个限制很快就能被取消,但在此期间,这是你必须做的。您还可以使用ld.so.conf配置来使整个计算机的安装工作,在这种情况下,不再需要设置LD_LIBRARY_PATH。
https://stackoverflow.com/questions/66585528
复制相似问题