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

如果我这样做了,

os.environ["DEBUSSY"] = 1

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

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


当前回答

如果你纠结于Flask和unittest,请记住,如果你在任何方法之外设置了一个变量,当你导入应用程序时,这个变量会被读取。可能看起来微不足道,但可以省去一些麻烦。

例如,如果进入你的Flask单元测试你:

导入应用 在setUp方法中设置环境变量。 使用app.test_client()来测试应用程序

进入第二步的变量到第三步时将不会看到,因为在执行第一步时已经读取了该变量。

其他回答

您可能需要考虑代码健壮性的其他方面;

当您将整数值变量存储为环境变量时,请尝试

os.environ['DEBUSSY'] = str(myintvariable)

然后对于检索,考虑到要避免错误,就应该尝试

os.environ.get('DEBUSSY', 'Not Set')

可能将'-1'替换为'未设置'

所以,把这些放在一起

myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))

print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)

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

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)

管理用户定义的环境变量的一种简单方法是将所有环境变量放在一个文本文件中,并在运行时加载它们。我们可以使用python-dotenv包来实现这一点,该包允许我们导入这些变量。该软件包可以通过以下方式安装:

pip install python-dotenv

默认情况下,该模块在当前目录中查找一个名为.env的文件。在这个文件中定义所有的变量,每行一个,如下所示:

DEBUSSY=1    
PATH_TO_EXECUTABLE=/home/user_name/project/run.sh

然后将这些导入到您的环境中,如下所示:

from dotenv import load_dotenv
load_dotenv()

您可以将包含已定义变量的文件的路径指定为load_dotenv的可选参数。随后,可以通过os模块访问这些环境变量,如其他响应中所解释的那样。

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

然后做

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

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

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

some_value = os.environ["DEBUSSY"]

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