【问题标题】:Is it possible to set an environment variable from Python permanently?是否可以从 Python 永久设置环境变量?
【发布时间】: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 的长度限制

标签: python operating-system environment-variables


【解决方案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

【讨论】:

【解决方案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 安装

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-25
          • 2014-04-23
          • 2019-09-03
          • 2021-12-19
          • 1970-01-01
          相关资源
          最近更新 更多