Linux profile.d环境变量不能在Python

时间:2015-06-23 17:08:27

标签: python linux environment-variables cx-oracle

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

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

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

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

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

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

# 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是否无法使用环境变量,除非我手动为它们执行导出语句?

1 个答案:

答案 0 :(得分:1)

好吧,我发现两个环境变量中的一个未使用.sh中的/etc/profile.d文件正确导出,并且$LD_LIBRARY_PATH会给我No such file or directorytclient_12_1,但是$ORACLE_HOME会给我/home/user1/instantclient_12_1/: is a directory

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

现在一切正常。