使用Python持久更改环境变量

时间:2016-01-15 22:25:55

标签: python python-3.x

是否可以使用Python 3.5在Windows和Linux中创建和更新环境变量,以便它们得到持久保存?

目前我用这个:

import os
os.environ["MY_VARIABLE"] = "TRUE"

然而,似乎这不会持久地“存储”环境变量。

2 个答案:

答案 0 :(得分:2)

我在这里为Linux发言,不确定Windows。

环境变量不会那样工作。它们是流程的一部分(通过更改os.environ来修改它),它们将传播到流程的子流程(显然是他们的孩子)。它们只在内存中,并且无法设置和保持"他们直接。

但是有几个配置文件允许您更精细地设置环境。它们由各种进程读取,可以是系统范围的,特定于用户,特定于shell,特定类型的进程等。

其中一些是:

    系统范围变量的
  • / etc / environment
  • / etc / profile for shells(及其子女)
  • / etc
  • 中的其他几个特定于shell的文件
  • 用户主目录中的各种点文件,例如.profile,.bashrc,.bash_profile,.tcshrc等。阅读您的shell文档。
  • 我相信还有各种方法来配置从GUI启动的环境变量(例如从gnome面板或类似的东西)。

大多数情况下,您只想为当前用户设置环境变量。如果您只关心shell,请以这种格式将它们附加到〜/ .profile:

NAME="VALUE"

答案 1 :(得分:2)

持久的标准方式'环境变量带有配置文件。编写应用程序以打开配置文件并设置它找到的每个NAME = VARIABLE对。可选地,此步骤可以在包装器启动脚本中完成。

如果你想保存'变量的状态,您需要打开配置文件并修改其内容。然后,当它再次读入时,您的应用程序将相应地设置环境。

您当然可以以其他方式存储配置。例如,在pickle / shelve的configuration_settings类中。然后在程序启动时读入pickle类并设置环境。需要了解的重要一点是,当流程退出其环境时未保存。环境从父进程继承,作为分叉的有意副产品。

配置文件可能如下所示:

NAME=VALUE
NAME2=VALUE2
...

或者您的配置类可能如下所示:

class Configuration():
    env_vars = {}
    import os
    def set(name, val):
        env_vars[name] = val
        os.environ[name] = val
    def unset(name):
        del env_vars[name]
        del os.environ[name]
    def init():
        for name in env_vars:
            os.environ[name] = env_vars[name]

我们的应用程序中的其他地方

import shelve
filename = "config.db"
d = shelve.open(filename)

# get our configuration out of shelve
config = d['configuration']

# initialize environment
config.init()

# setting an environment variable
config.set("MY_VARIABLE", "TRUE")

#unsetting
config.unset("MY_VARIABLE")

# save our configuration
d['configuration'] = config

代码未经过测试,但我认为你得到了这个问题。