如何在Python中访问环境变量?

如何在Python中获取环境变量的值?

2622691 次浏览

您可以使用以下命令访问环境变量

import osprint os.environ

尝试查看PYTHONPATH或PYTHONHOME环境变量的内容。也许这会对你的第二个问题有所帮助。

关于环境变量:

import osprint os.environ["HOME"]

环境变量通过#0访问:

import osprint(os.environ['HOME'])

查看所有环境变量的列表:

print(os.environ)

如果键不存在,尝试访问它将引发KeyError。为了避免这种情况:

# Returns `None` if key doesn't existprint(os.environ.get('KEY_THAT_MIGHT_EXIST'))
# Returns `default_value` if key doesn't existprint(os.environ.get('KEY_THAT_MIGHT_EXIST', default_value))
# Returns `default_value` if key doesn't existprint(os.getenv('KEY_THAT_MIGHT_EXIST', default_value))

以下是如何检查是否设置了$FOO

try:os.environ["FOO"]except KeyError:print "Please set the environment variable FOO"sys.exit(1)

检查密钥是否存在(返回TrueFalse

'HOME' in os.environ

您还可以在打印密钥时使用get();如果要使用默认值,则很有用。

print(os.environ.get('HOME', '/home/username/'))

其中/home/username/是默认值

如果您计划在生产Web应用程序代码中使用该代码,请使用Django烧瓶等任何Web框架,请使用envparse等项目。使用它,您可以将值读取为定义的类型。

from envparse import env# will read WHITE_LIST=hello,world,hi to white_list = ["hello", "world", "hi"]white_list = env.list("WHITE_LIST", default=[])# Perfect for reading booleanDEBUG = env.bool("DEBUG", default=False)

注意:kennethreitz的autoenv是制作项目特定环境变量的推荐工具。对于那些使用autoenv的人,请注意将.env文件保持私有(公共无法访问)。

import osfor a in os.environ:print('Var: ', a, 'Value: ', os.getenv(a))print("all done")

这将打印所有环境变量及其值。

实际上可以这样做:

import os
for item, value in os.environ.items():print('{}: {}'.format(item, value))

或者简单地说:

for i, j in os.environ.items():print(i, j)

查看参数中的值:

print(os.environ['HOME'])

或:

print(os.environ.get('HOME'))

要设置值:

os.environ['HOME'] = '/new/value'

还有许多很棒的库。例如,Envs将允许您从环境变量中解析对象,这是rad。例如:

from envs import envenv('SECRET_KEY') # 'your_secret_key_here'env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']

对于Django,请参阅Django-environ

$ pip install django-environ
import environ
env = environ.Env(# set casting, default valueDEBUG=(bool, False))# reading .env fileenviron.Env.read_env()
# False if not in os.environDEBUG = env('DEBUG')
# Raises Django's ImproperlyConfigured exception if SECRET_KEY not in os.environSECRET_KEY = env('SECRET_KEY')

你也可以试试这个:

首先,安装python-decouple

pip install python-decouple

将其导入您的文件

from decouple import config

然后获取环境变量

SECRET_KEY=config('SECRET_KEY')

阅读更多关于Python库这里的信息。

编辑-2021年10月

以下是@Peter的评论,以下是您如何测试它:

main.py

#!/usr/bin/env python

from os import environ
# Initialize variablesnum_of_vars = 50for i in range(1, num_of_vars):environ[f"_BENCHMARK_{i}"] = f"BENCHMARK VALUE {i}"
def stopwatch(repeat=1, autorun=True):"""Source: https://stackoverflow.com/a/68660080/5285732stopwatch decorator to calculate the total time of a function"""import timeitimport functools    
def outer_func(func):@functools.wraps(func)def time_func(*args, **kwargs):t1 = timeit.default_timer()for _ in range(repeat):r = func(*args, **kwargs)t2 = timeit.default_timer()print(f"Function={func.__name__}, Time={t2 - t1}")return r        
if autorun:try:time_func()except TypeError:raise Exception(f"{time_func.__name__}: autorun only works with no parameters, you may want to use @stopwatch(autorun=False)") from None        
return time_func    
if callable(repeat):func = repeatrepeat = 1return outer_func(func)    
return outer_func
@stopwatch(repeat=10000)def using_environ():for item in environ:pass
@stopwatchdef using_dict(repeat=10000):env_vars_dict = dict(environ)for item in env_vars_dict:pass
python "main.py"
# OutputFunction=using_environ, Time=0.216224731Function=using_dict, Time=0.00014206099999999888

如果这是真的……使用dict()比直接访问environ快1500倍。


性能驱动的方法-调用environ是昂贵的,所以最好调用一次并将其保存到字典中。完整示例:

from os import environ

# Slowerprint(environ["USER"], environ["NAME"])
# Fasterenv_dict = dict(environ)print(env_dict["USER"], env_dict["NAME"])

P. S-如果你担心暴露私有环境变量,那么在赋值后清理env_dict

您应该首先使用

import os

然后实际打印环境变量值

print(os.environ['yourvariable'])

当然,将您的变量替换为您想要访问的变量。

导入os模块:

import os

获取环境变量:

os.environ.get('Env_var')

要设置环境变量:

# Set environment variablesos.environ['Env_var'] = 'Some Value'

在单行程序中使用嵌套for循环的棘手部分是你使用列表理解。因此,为了打印环境变量所有,而无需导入外部库,您可以使用:

python -c "import os;L=[f'{k}={v}' for k,v in os.environ.items()]; print('\n'.join(L))"