如何在 Python 中访问环境变量?
- 2024-12-03 08:44:00
- admin 原创
- 186
问题描述:
如何在 Python 中获取环境变量的值?
解决方案 1:
环境变量通过以下方式访问os.environ
:
import os
print(os.environ['HOME'])
查看所有环境变量的列表:
print(os.environ)
如果不存在某个密钥,则尝试访问它将引发KeyError
。为了避免这种情况:
# Returns `None` if the key doesn't exist
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))
# Returns `default_value` if the key doesn't exist
print(os.environ.get('KEY_THAT_MIGHT_EXIST', default_value))
# Returns `default_value` if the key doesn't exist
print(os.getenv('KEY_THAT_MIGHT_EXIST', default_value))
解决方案 2:
检查键是否存在(返回True
或False
)
'HOME' in os.environ
您还可以get()
在打印密钥时使用它;如果您想使用默认值,它很有用。
print(os.environ.get('HOME', '/home/username/'))
默认值/home/username/
是
解决方案 3:
实际上可以这样做:
import os
for key, value in os.environ.items():
print(f'{key}: {value}')
或者简单来说:
for key, value in os.environ.items():
print('{}: {}'.format(key, 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'
解决方案 4:
$FOO
检查是否设置的方法如下:
try:
os.environ["FOO"]
except KeyError:
print "Please set the environment variable FOO"
sys.exit(1)
解决方案 5:
您可以使用以下方式访问环境变量
import os
print os.environ
尝试查看 PYTHONPATH 或 PYTHONHOME 环境变量的内容。也许这对您的第二个问题有帮助。
解决方案 6:
至于环境变量:
import os
print os.environ["HOME"]
解决方案 7:
导入os
模块:
import os
获取环境变量:
os.environ.get('Env_var')
要设置环境变量:
# Set environment variables
os.environ['Env_var'] = 'Some Value'
解决方案 8:
import os
for a in os.environ:
print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")
这将打印所有环境变量及其值。
解决方案 9:
如果您打算在生产 Web 应用程序代码中使用该代码,使用任何 Web 框架(如Django和Flask ) ,请使用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 boolean
DEBUG = env.bool("DEBUG", default=False)
注意:kennethreitz 的autoenv是推荐用于创建项目特定环境变量的工具。对于使用 的用户autoenv
,请注意将.env
文件保密(不可公开访问)。
解决方案 10:
还有许多很棒的库。例如, Envs允许您从环境变量中解析对象,这很棒。例如:
from envs import env
env('SECRET_KEY') # 'your_secret_key_here'
env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']
解决方案 11:
已编辑 - 2021 年 10 月
根据@Peter的评论,您可以按照以下方法进行测试:
main.py
#!/usr/bin/env python
from os import environ
# Initialize variables
num_of_vars = 50
for 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/5285732
stopwatch decorator to calculate the total time of a function
"""
import timeit
import 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 = repeat
repeat = 1
return outer_func(func)
return outer_func
@stopwatch(repeat=10000)
def using_environ():
for item in environ:
pass
@stopwatch
def using_dict(repeat=10000):
env_vars_dict = dict(environ)
for item in env_vars_dict:
pass
python "main.py"
# Output
Function=using_environ, Time=0.216224731
Function=using_dict, Time=0.00014206099999999888
如果这是真的...使用 adict()
比environ
直接访问要快 1500 倍。
一种性能驱动的方法 - 调用environ
很昂贵,因此最好调用一次并将其保存到字典中。完整示例:
from os import environ
# Slower
print(environ["USER"], environ["NAME"])
# Faster
env_dict = dict(environ)
print(env_dict["USER"], env_dict["NAME"])
PS-如果您担心暴露私有环境变量,请env_dict
在分配后进行清理。
解决方案 12:
你也可以尝试这个:
首先,安装python-decouple
pip install python-decouple
将其导入到您的文件中
from decouple import config
然后获取环境变量
SECRET_KEY=config('SECRET_KEY')
在此处阅读有关 Python 库的更多信息。
解决方案 13:
您可以使用python-dotenv
模块访问环境变量
使用以下方法安装模块:
pip install python-dotenv
之后,创建一个.env
包含以下条目的文件:
BASE_URL = "my_base_url"
然后将模块导入到你的 Python 文件中
import os
from dotenv import load_dotenv
# Load the environment variables
load_dotenv()
# Access the environment variable
print(os.getenv("BASE_URL"))
解决方案 14:
对于 Django,请参阅Django-environ。
$ pip install django-environ
import environ
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()
# False if not in os.environ
DEBUG = env('DEBUG')
# Raises Django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')
解决方案 15:
和os
:
import os
# get the value of the environment variable HOME
os.getenv('HOME')
os.environ['HOME']
# show all environment variables (like `set` in bash)
os.environ
# set environment variable MYVAR (note: it has to be a string)
os.environ["MYVAR"] = "x"
# unset variable MYVAR
del os.environ["MYVAR"]
对于与 IPython/Jupyter 笔记本的交互工作,这个魔法%env
也很实用:
%env
%env HOME
%env MYVAR = "x"
# numbers are also allowed
%env MYVAR = 3
解决方案 16:
您应该首先使用 import os
import os
然后实际打印环境变量值
print(os.environ['yourvariable'])
当然,将yourvariable替换为您要访问的变量。
解决方案 17:
在单行代码中使用嵌套for 循环的棘手之处在于您必须使用列表推导。因此,为了打印所有环境变量,而无需导入外部库,您可以使用:
python -c "import os;L=[f'{k}={v}' for k,v in os.environ.items()]; print('
'.join(L))"