source

파이썬에서 환경 변수에 액세스하려면 어떻게 해야 합니까?

lovecheck 2023. 5. 17. 23:16
반응형

파이썬에서 환경 변수에 액세스하려면 어떻게 해야 합니까?

파이썬에서 환경 변수의 값을 얻으려면 어떻게 해야 합니까?

환경 변수는 다음을 통해 액세스할 수 있습니다.

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))

키가 존재하는지 확인(반환)True또는False)

'HOME' in os.environ

사용할 수도 있습니다.get()키를 인쇄할 때 사용합니다. 기본값을 사용하려는 경우 유용합니다.

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

어디에/home/username/기본값입니다.

다음을 확인하는 방법은 다음과 같습니다.$FOO설정됨:

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

실제로 다음과 같은 방법으로 수행할 수 있습니다.

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'

다음을 사용하여 환경 변수에 액세스할 수 있습니다.

import os
print os.environ

PYTHONPATH 또는 PYTHONHOME 환경 변수의 내용을 확인해 보십시오.아마도 이것은 당신의 두 번째 질문에 도움이 될 것입니다.

환경 변수의 경우:

import os
print os.environ["HOME"]

가져오기os모듈:

import os

환경 변수를 가져오는 방법

os.environ.get('Env_var')

환경 변수를 설정하는 방법

# Set environment variables
os.environ['Env_var'] = 'Some Value'
import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

그러면 값과 함께 모든 환경 변수가 인쇄됩니다.

Django Flask와 같은 웹 프레임워크를 사용하여 프로덕션 웹 응용 프로그램 코드에서 코드를 사용할 계획이라면 envarse와 같은 프로젝트를 사용하십시오.이를 사용하여 정의된 유형의 값을 읽을 수 있습니다.

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비공개 파일(공개되지 않은 파일)입니다.

또한 많은 훌륭한 도서관들이 있습니다.예를 들어, Envs를 사용하면 환경 변수인 rad에서 개체를 구문 분석할 수 있습니다.예:

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

다음을 시도할 수도 있습니다.

먼저 설치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 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

만약 이것이 사실이라면...사용 속도가 1500배 더 빠릅니다.dict()액세스하는 대신environ직접적으로.


성과 중심 접근 방식 - 소명environ비용이 많이 들기 때문에 한 번 불러 사전에 저장하는 것이 좋습니다.전체 예:

from os import environ


# Slower
print(environ["USER"], environ["NAME"])

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

추신: 개인 환경 변수가 노출되는 것이 걱정되는 경우 삭제합니다.env_dict과제가 끝난 후에

장고의 경우 장고 환경을 참조하십시오.

$ 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')

먼저 다음을 사용하여 OS를 가져와야 합니다.

import os

그런 다음 실제로 환경 변수 값을 인쇄합니다.

print(os.environ['yourvariable'])

물론 변수를 액세스할 변수로 바꾸십시오.

한 줄로 중첩된 루프를 사용할 때 까다로운 부분은 목록 이해를 사용해야 한다는 것입니다.따라서 외부 라이브러리를 가져오지 않고 모든 환경 변수를 인쇄하려면 다음을 사용할 수 있습니다.

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

사용할 수 있습니다.python-dotenv environment 는 환경 변수에 접근하는 모듈입니다.

다음을 사용하여 모듈을 설치합니다.

pip install python-dotenv

그런 다음 모듈을 Python 파일로 가져옵니다.

import os
from dotenv import load_dotenv

# Load the environment variables
load_dotenv()

# Access the environment variable
print(os.getenv("BASE_URL"))

언급URL : https://stackoverflow.com/questions/4906977/how-can-i-access-environment-variables-in-python

반응형