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

how to set environmental variables permanently in posix(unix/linux) machine using python script

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

如果我 运行 下面的程序我得到了变量路径。关闭它并打开新终端以使用命令 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()

请帮帮我。

无论您是从 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

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

的环境

这里是我用来设置环境变量的:

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) 时需要具有权限。

请记住,环境是从父进程继承的,您不能让子进程设置父进程的环境。