如何使用 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
) 时需要具有权限。
请记住,环境是从父进程继承的,您不能让子进程设置父进程的环境。
我正在尝试永久设置环境变量。但暂时它正在工作。
如果我 运行 下面的程序我得到了变量路径。关闭它并打开新终端以使用命令 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
) 时需要具有权限。
请记住,环境是从父进程继承的,您不能让子进程设置父进程的环境。