是否可以从 Python 永久设置环境变量?
Posted
技术标签:
【中文标题】是否可以从 Python 永久设置环境变量?【英文标题】:Is it possible to set an environment variable from Python permanently? 【发布时间】:2013-07-13 12:30:06 【问题描述】:使用os
模块我可以获得环境变量的值。例如:
os.environ['HOME']
但是,我无法设置环境变量:
os.environ['BLA'] = "FOO"
它在程序的当前会话中工作,但是当我的 python 程序完成时,我没有看到它更改(或设置)环境变量的值。有没有办法从 Python 中做到这一点?
【问题讨论】:
对于windows我可以推荐一个模块来通过注册表设置变量。还有 CLI 应用程序:github.com/beliaev-maksim/py_setenv 这对用户/系统级别有很好的控制,并且没有 setx 的长度限制 【参考方案1】:如果你想要让你的环境变量在会话中保持不变,你可以
对于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
中
【讨论】:
只是好奇,有没有办法在 Windows 上完成这个? @Alexis 我对 Windows 不是很熟悉,但是根据superuser.com/questions/79612/…,您可以在 python 中使用setx
命令。或者您可以直接使用_winreg
python 模块docs.python.org/2/library/_winreg.html 访问win注册表
对于windows我可以推荐一个模块来通过注册表设置变量。还有 CLI 应用程序:github.com/beliaev-maksim/py_setenv 这对用户/系统级别有很好的控制,并且没有 setx 的长度限制【参考方案2】:
如果您想这样做并将它们永久设置到用户帐户中,您可以使用 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()
运行之后你可以去环境看看它们是如何被添加到我的用户环境中的
【讨论】:
【参考方案3】:我不确定。您可以返回变量并以这种方式进行设置。为此,请打印它。
(python 程序)
...
print foo
(重击)
set -- $(python test.py)
foo=$1
【讨论】:
【参考方案4】:@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”字样。
【讨论】:
【参考方案5】:您可以使用 py-setenv 来完成这项工作。它将访问 Windows 注册表并为您进行更改,通过 python -m pip install py-setenv
安装
【讨论】:
以上是关于是否可以从 Python 永久设置环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
即使在从python脚本执行linux脚本后,也永久设置环境变量