source

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

gigabyte 2022. 9. 16. 23:08
반응형

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

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

환경변수는 다음과 같이 접근합니다.

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

모든 환경변수 목록을 표시하려면:

print(os.environ)

키가 존재하지 않는 경우 해당 키에 액세스하려고 하면 키가 생성됩니다.KeyError. 이를 피하기 위해:

# Returns `None` if key doesn't exist
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))

# Returns `default_value` if key doesn't exist
print(os.environ.get('KEY_THAT_MIGHT_EXIST', default_value))

# Returns `default_value` if 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/는 디폴트입니다.

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

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'

여기 확인 방법이 있습니다.$FOO다음과 같이 설정되어 있습니다.

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

환경변수는 다음 방법으로 접근할 수 있습니다.

import os
print os.environ

PYTONPATH 또는 PYTONHOME 환경변수의 내용을 확인합니다.아마 이것이 두 번째 질문에 도움이 될 것입니다.

환경변수에 대해서:

import os
print os.environ["HOME"]
import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

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

를 Import 합니다.os모듈:

import os

환경변수를 가져오려면:

os.environ.get('Env_var')

환경변수를 설정하려면:

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

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, 주의해 주세요..envfile private(공개되지 않음)

또한 많은 훌륭한 도서관들이 있다.를 들어 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해야 합니다.

import os

실제 환경변수 값을 출력합니다.

print(os.environ['yourvariable'])

물론 액세스할 변수로 변수를 바꿉니다.

네스트된 for-loops를 한 줄에 사용할 때 어려운 점은 목록 이해 기능을 사용해야 한다는 것입니다.따라서 외부 라이브러리를 가져오지 않고 모든 환경 변수를 인쇄하려면 다음을 사용할 수 있습니다.

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

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

반응형