是否可以从 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脚本后,也永久设置环境变量

cmd设置环境变量

source命令 与 设置环境变量的四个文件 (设置永久环境变量)

python怎么设置环境变量

如何永久设置Windows环境变量?

如何配置python的环境变量