从Python永久设置环境变量是否可能?

17

使用 os 模块,我可以获取环境变量的值。例如:

os.environ['HOME']

然而,我无法设置环境变量:

os.environ['BLA'] = "FOO"

在当前程序会话中它可以工作,但当Python程序结束时,我没有看到它更改(或设置)环境变量的值。是否有一种从Python中进行这样操作的方法?


对于Windows,我可以推荐一个通过注册表设置变量的模块。它还有CLI应用程序:https://github.com/beliaev-maksim/py_setenv,可以很好地控制用户/系统级别,并且没有像setx那样的长度限制。 - Beliaev Maksim
6个回答

12

如果你想让环境变量在会话之间持久化,你可以这样做:

对于 Unix

像我们在 bash shell中所做的那样。将您的环境变量附加到 ~/.bashrc

import os
with open(os.path.expanduser("~/.bashrc"), "a") as outfile:
    # 'a' stands for "append"  
    outfile.write("export MYVAR=MYVALUE")

或者针对Windows

setx /M MYVAR "MYVALUE"

在Program Files的Startup中有一个*.bat文件


1
只是出于好奇,有没有在Windows上实现这个的方法? - Alexis
@Alexis 我不太熟悉 Windows,但根据 http://superuser.com/questions/79612/setting-and-getting-windows-environment-variables-from-the-command-prompt,你可以在 Python 中使用 setx 命令。或者你可以使用 _winreg Python 模块直接访问 win 注册表 http://docs.python.org/2/library/_winreg.html。 - rantanplan
对于Windows系统,我可以推荐一个通过注册表设置变量的模块。此外还有CLI应用程序:https://github.com/beliaev-maksim/py_setenv。它可以很好地控制用户/系统级别,并且没有像setx那样的长度限制。 - Beliaev Maksim
1
这个回答不符合问题的精神。请求者询问如何通过Python设置环境变量,而不是如何在下次登录或运行“source ~/.bashrc”后通过Python设置环境变量。 - Wayne Workman

6
如果你想将它们永久设置到用户帐户中,你可以使用 setx,但如果要设置为全局,则可以使用 setx /M,但需要提升权限。(本例以Windows为例,如果是Linux则可以使用 export
import subprocess
if os.name == 'posix':  # if is in linux
    exp = 'export hi2="youAsWell"'
if os.name == 'nt':  # if is in windows
    exp = 'setx hi2 "youAsWell"'
subprocess.Popen(exp, shell=True).wait()

在运行后,您可以进入环境并查看它们已如何添加到我的用户环境中。 enter image description here

3

@rantanplan的答案是正确的。然而,对于Unix系统,如果您想要设置多个环境变量,建议在outfile行末尾添加\n,如下所示:

outfile.write("export MYVAR=MYVALUE\n")

所以代码看起来像这样:
import os
with open(os.path.expanduser("~/.bashrc"), "a") as outfile:
    # 'a' stands for "append"  
    outfile.write("export MYVAR1=MYVALUE1\n")
    outfile.write("export MYVAR2=MYVALUE2\n")

这将防止在环境变量的值末尾添加“export”单词。

1
我不确定。您可以返回变量并以此设置它。要执行此操作,请打印它。
(Python程序)
...
print foo

(bash)
set -- $(python test.py)
foo=$1

0

你可以使用 py-setenv 完成这项任务。它将访问 Windows 注册表并为您进行更改,可以通过 python -m pip install py-setenv 进行安装。


0
对于想要在Windows上应用此解决方案的人来说,以下可能是一个不错的解决方案。
对于特定用户,
from os import path
with open(path.join(path.expanduser('~'),"AppData","Roaming","Microsoft","Windows"
                    ,"Start Menu","Programs","Startup","script.ps1"), 'w') as fp:
        fp.write('[Environment]::SetEnvironmentVariable("THIS_IS_NAME", "THIS_IS_VALUE", "User") ')

正在执行的命令用于设置环境。如果有任何拼写错误,请告诉我;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接