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

2024-12-03 08:44:00
admin
原创
186
摘要:问题描述:如何在 Python 中获取环境变量的值?解决方案 1:环境变量通过以下方式访问os.environ:import os print(os.environ['HOME']) 查看所有环境变量的列表:print(os.environ) 如果不存在某个密钥,则尝试访问它将引发KeyError。为了避免这...

问题描述:

如何在 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:

检查键是否存在(返回TrueFalse

'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))"
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用