我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。

如果我这样做了,

os.environ["DEBUSSY"] = 1

它抱怨说1必须是一个字符串。

我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。


当前回答

环境是为代码本身(而不是子进程)冻结的,不能通过编程方式完成。

一个好的解决方案,不管是什么平台,都是将对python的调用包装在一个批处理文件中。例如:如果我在linux上,批处理文件可能看起来像这样

export "DEBUSSY"="1"
python mycode.py

其他回答

我写了这个小的上下文管理器,它只在缩进块的持续时间内设置变量:

import os
from contextlib import contextmanager

@contextmanager
def extended_env(new_env_vars):
    old_env = os.environ.copy()
    os.environ.update(new_env_vars)
    yield
    os.environ.clear()
    os.environ.update(old_env)

示例用法(Windows为%,Linux为$):

import subprocess

subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)

with extended_env({"ENVTEST": "17"}):
    subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)

subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)

环境变量必须是字符串,因此使用

import os
os.environ["DEBUSSY"] = "1"

将变量DEBUSSY设置为字符串1。

要稍后访问此变量,只需使用

print(os.environ["DEBUSSY"])

子进程自动继承父进程的环境——您不需要做任何特殊的操作。

那么os呢?environ["DEBUSSY"] = '1'?环境变量总是字符串。

有一个很好的开箱即用的Python解决方案叫做pycrosskit。 它将为Linux和Windows创建持久的环境变量。

用法:

# Will Set Persistent Value for Variable in System
# * subkey works only for windows like file in folder
# * reg_path works only for windows as register path 
SysEnv.set_var(name, value, subkey, reg_path=default_reg_path)

# Will Get Persistent Value for Variable in System
# * reg_path works only for windows as register path
# * delete, deletes key from environment and its subkeys after read
SysEnv.get_var(name, reg_path=default_reg_path, delete=False)

如果我做os。environ["DEBUSSY"] = 1,它 抱怨说1必须是 字符串。

然后做

os.environ["DEBUSSY"] = "1"

我还想知道如何阅读 python中的环境变量(在 脚本的后面部分)一旦我设置 它。

只需使用os。environ["德彪西"],如在

some_value = os.environ["DEBUSSY"]