【问题标题】:Linux profile.d environment variables don't work with cx_oracle in PythonLinux profile.d 环境变量不适用于 Python 中的 cx_oracle
【发布时间】:2015-09-09 15:04:38
【问题描述】:

这是我上一个问题的延续:cx_Oracle does not recognize location of Oracle software installation for installation on Linux

在我能够正确安装 cx_oracle 之后,我想设置我的环境,以便不必每次都导出环境变量。

为此,我编写了一个包含这两个导出语句的 shellscript:

export ORACLE_HOME=/home/user1/instantclient_12_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

并将这个 .sh 文件保存到 /etc/profile.d/ 文件夹中。

当我再次使用 PuTTY 登录服务器时,回显语句说环境变量在那里:

# echo $ORACLE_HOME
/home/user1/instantclient_12_1
# echo $LD_LIBRARY_PATH
:/home/user1/instantclient_12_1

但是当我用 cx_oracle 运行一些 python 代码时,我得到一个错误:

ImportError: libclntsh.so.12.1: cannot open shared object file: No such file or directory

只有当我重新输入环境变量的导出命令时,代码才会再次运行。在我这样做之后,使用 cx_oracle 的代码运行良好。

为什么环境变量在我执行 echo 命令时显示出来却不能正常工作?以及如何让环境变量正确持久化?

我阅读的指南说要在 /etc/profile.d/ 中使用 shell 脚本,因为最好不要直接编辑 /etc/profile

更新:

我尝试将两个导出行添加到/etc/profile,但是当我回显时,我仍然遇到环境变量存在的相同问题,但是尝试在 python 中使用 cx_oracle 时仍然遇到此错误:

ImportError: libclntsh.so.12.1: cannot open shared object file: No such file or directory

我是否遗漏了一些关于定义环境变量的关键内容?

第二次更新: 我尝试使用我计划使用调用 cx_Oracle 的代码运行的 shell 脚本来初始化环境:

StartServer.sh 的内容:

export ORACLE_HOME=/home/user1/instantclient_12_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
python3 ./UDPDBQuery.pyc

我尝试通过以下方式在后台运行代码:

bash StartServer.sh &

但是我还是遇到了和以前一样的错误,好像我没有放入环境变量一样。仅当我自己导出变量,然后再次运行代码时,它才有效。当我注销时,代码也停止在后台运行。我仍然很困惑为什么它不起作用。

除非我手动为它们执行导出语句,否则 cx_oracle 是否无法使用环境变量?

【问题讨论】:

    标签: python linux environment-variables cx-oracle


    【解决方案1】:

    好的,我发现两个环境变量之一没有正确导出/etc/profile.d 中的.sh 文件,并且执行$LD_LIBRARY_PATH 会给我No such file or directorytclient_12_1,但$ORACLE_HOME 会给我@ 987654327@.

    我解决这个问题的方法是将导出语句拆分为 profile.d 中的两个单独的 shell 脚本。

    现在一切正常。

    【讨论】:

    猜你喜欢
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多