我正在尝试永久设置环境变量。但暂时它正在运作。
如果我在程序下运行,我得到了变量路径。关闭它并打开新终端以使用命令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()
请帮帮我。
答案 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