如何使用python脚本在posix(unix / linux)机器上永久设置环境变量

时间:2015-01-23 11:50:58

标签: python linux unix environment-variables

我正在尝试永久设置环境变量。但暂时它正在运作。

如果我在程序下运行,我得到了变量路径。关闭它并打开新终端以使用命令printenv LD_LIBRARY_PATH查找变量路径后,将不会打印任何内容。

#!/usr/bin/python


import os
import subprocess

def setenv_var():
    env_var = "LD_LIBRARY_PATH"
    env_path = "/usr/local/lib"`enter code here`
    os.environ[env_var] = env_path
    process = subprocess.Popen('printenv ' + env_var, stdout=subprocess.PIPE, shell=True)
    result = process.communicate()[0]
    return result

if __name__ == '__main__':
    print setenv_var()

请帮帮我。

3 个答案:

答案 0 :(得分:1)

设置环境变量时,它仅影响当前正在运行的进程(并且,通过扩展,可以影响设置变量后分叉的所有子进程)。如果您尝试在shell中设置环境变量并且希望始终为交互式shell设置该环境变量,则需要在shell的启动脚本(例如.login,.bashrc,.profile)中设置它。 。您运行的命令(最初)是运行它们的shell的子代,因此虽然它们继承了shell的环境并且可以更改自己的环境,但它们无法更改shell的环境。

答案 1 :(得分:1)

以下是我用来设置环境变量的内容:

def setenv_var(env_file, set_this_env=True):
    env_var = "LD_LIBRARY_PATH"
    env_path = "/usr/local/lib"`enter code here`
    # set environments opened later by appending to `source`-d file
    with open(env_file, 'a') as f:
        f.write(os.linesep + ("%s=%s" % (env_var, env_path)))
    if set_this_end:
        # set this environment
        os.environ[env_var] = env_path

现在你只需要选择设置它的位置,这是函数中的第一个参数。我建议使用特定于配置文件的文件~/.profile,或者如果您使用的是非常常见的bash ~/.bashrc

您也可以使用/etc/environment等文件全局设置它,但在运行此脚本(sudo python script.py)时,您需要拥有权限。

请记住,环境是从父进程继承的,并且您无法让孩子设置父进程'环境。

答案 2 :(得分:0)

无论您是使用bash进行export还是从Python设置os.environ,这些只会留给会话或流程的生命周期。如果要将它们永久设置,则必须触摸并将其添加到相应的shell配置文件中。

对于前。如果你正在使用bash,你可以这样做:

with open("~/.bashrc", "a") as outfile: # 'a' stands for "append"
     outfile.write("export LD_LIBRARY_PATH=/usr/local/lib")

检查一下,了解哪个文件要根据目标shell添加它。 https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables