Python의 Env 파일에서 환경 변수 읽기

Jay Shaw 2023년6월21일
  1. 로컬 환경 파일에서 환경 변수 읽기
  2. Bash 스크립트를 실행하여 환경 변수 읽기
  3. 결론
Python의 Env 파일에서 환경 변수 읽기

환경 파일은 프로그램이 여러 경로의 패키지와 상호 작용할 필요가 없도록 프로그램에 필요한 모든 종속성을 저장합니다.

이 기사는 Python에서 .env 파일을 읽고 로컬 환경 파일에서 Python의 환경 변수를 가져오는 방법에 중점을 둡니다.

로컬 환경 파일에서 환경 변수 읽기

대부분의 최신 프로그램은 도커를 사용하여 환경 내에서 프로그램을 실행합니다. 도커는 효율적인 메모리 관리 기능을 갖춘 대체 가상 머신과 같습니다.

그러나 테스트 중에는 도커 컨테이너에서 프로그램을 제거하고 로컬 환경 파일을 사용하여 로컬에서 테스트해야 합니다.

이 기사에서는 로컬 환경 파일을 설정하고 Python에서 .env 파일을 가져오고 읽는 방법을 설명합니다.

Python 스크립트용 환경 파일 생성

텍스트 파일 내에 프로그램의 키-값 쌍을 제공하고 .env 확장자로 저장하여 환경 파일을 만듭니다.

다음 단계에 따라 .env 파일을 생성합니다.

  • 메모장을 열고 환경 변수를 작성하십시오. 예를 들어,
    MY_ENV_VAR="This is my env var content."
    
  • 이 파일을 이름 뒤에 .env 확장자가 오는 형식으로 저장합니다(예: config.env). 이렇게 하면 .env 파일이 생성됩니다.
  • 이제 Python에서 env 파일을 읽으려면 .env 파일이 있는 동일한 디렉터리에 Python 스크립트를 만들어야 합니다.

환경 변수를 읽는 Python 스크립트 만들기

이 프로그램은 python-dotenv 라이브러리를 사용하여 로컬 환경 파일에서 Python의 .env 파일을 읽습니다. 설치하려면 명령 프롬프트 또는 PowerShell을 열고 다음 명령을 작성하십시오.

pip install python-dotenv

python-dotenv가 설치되면 Python에서 스크립트를 로드하고 env 파일을 읽을 수 있습니다. 이 프로그램은 python-dotenvos라는 두 가지 라이브러리 패키지를 사용합니다.

환경 변수는 라이브러리 함수 load_dotenv()를 사용하여 코드에 로드됩니다. load_dotenv() 함수는 .env 파일에서 환경 변수를 추출하는 데 사용됩니다.

또 다른 라이브러리 함수는 dotenv_values로, 환경 변수와 상호 작용하지 않고 대신 구문 분석된 값이 있는 .env 파일에서 dict를 반환한다는 점을 제외하면 이전 함수와 유사합니다.

아래는 Python 프로그램입니다.

import os
from dotenv import load_dotenv

load_dotenv()

MY_ENV_VAR = os.getenv("MY_ENV_VAR")

코드의 마지막 줄은 os.getenv 함수를 사용하여 .env 파일에서 MY_ENV_VAR 변수 값을 가져오고 유사한 이름의 변수를 사용하여 Python 프로그램 내부에 저장합니다.

MY_ENV_VAR 변수를 인쇄하면 .env 파일의 내용이 표시됩니다.

This is my env var content.

Bash 스크립트를 실행하여 환경 변수 읽기

이것은 프로그램이 Python에서 .env 파일을 읽을 수 없고 load_dotenv 라이브러리 함수가 환경 변수 대신 none을 반환하는 문제를 해결한 두 번째 방법입니다. 이는 .env 파일이 소싱되지 않았기 때문에 발생하며, 이는 Python 프로그램이 .env 파일을 읽을 수 없고 데이터 변수를 로드하지 못함을 의미합니다.

셸 스크립트를 실행하는 시스템에서는 환경 파일 로드와 Python 스크립트 실행을 함께 래핑할 수 있습니다. 이를 통해 가상 환경에서 .env 파일을 로드한 다음 해당 환경 내에서 Python 스크립트를 실행할 수 있습니다.

이 섹션에서는 환경 변수를 로드하고 Python에서 .env 파일을 읽기 위해 쉘 스크립트로 래핑하는 방법을 보여줍니다.

.env 파일 생성

이 프로세스는 이전 섹션의 프로세스와 유사하지만 메모장과 같은 일반 단어 편집기를 사용하는 대신 EOL 변환을 제공하는 텍스트 편집기가 필요합니다.

EOL 변환은 텍스트 파일의 줄 끝을 변환합니다. 이와 같은 파일을 만들려면 다음이 필요합니다.

  • Notepad++ 또는 줄 끝 변환을 제공하는 다른 텍스트 편집기를 다운로드하여 설치합니다.
  • 다음과 같은 몇 가지 환경 변수를 작성합니다.
    TYPE=prod
    PORT=5000
    
  • 편집 > EOL 변환으로 이동하여 Unix(LF)를 선택합니다.
  • 파일을 .env 확장자로 저장합니다(예: config.env).

그러면 쉘 스크립트가 읽을 수 있는 환경 파일이 생성됩니다. 이제 Python 코드를 작성해 보겠습니다.

Python에서 .env 파일을 읽을 수 있는 Python 스크립트 만들기

이 프로그램은 외부 Python 라이브러리 없이도 Python에서 .env 파일을 가져오고 읽습니다. 프로그램은 라이브러리 패키지 os를 가져오고 라이브러리 함수 os.environ을 사용하여 변수에서 값을 추출합니다.

그런 다음 추출된 값이 인쇄됩니다.

import os

print(os.environ.get("TYPE"))
print(os.environ.get("PORT"))

그러나 이 스크립트는 Python에서 .env 파일을 독립적으로 읽을 수 없습니다. 스크립트를 실행하면 없음이 반환됩니다.

Win 10@DESKTOP-8MEIQB8 MINGW64 ~/try
$ python test.py

None
None

이는 Python 스크립트가 환경 파일이 동일한 디렉터리 내에 있어도 액세스할 수 없기 때문에 발생합니다. 이것이 .env 파일을 소싱하고 Python 스크립트를 동시에 실행하는 쉘 스크립트가 사용되는 이유입니다.

.env 파일을 Python 스크립트로 로드하는 셸 스크립트 만들기

이 프로세스는 Bash 명령이 Unix EOL 변환으로 작성되므로 환경 파일을 만드는 것과 동일합니다.

Notepad++에서 새 파일을 열고 다음과 같은 Bash 명령을 작성합니다.

#!/usr/bin/env bash

set -a
source config.env
set +a

python test.py

코드의 첫 번째 줄은 일반적으로 Bash 스크립트에서 지정해야 하는 일련의 문자인 shebang입니다. 여기에서 Bash가 액세스되는 파일 경로를 표시합니다.

set -a를 사용하면 모든 변수를 다양한 자식 프로세스 외부로 내보낼 수 있습니다. 여기서 자식 프로세스는 실행해야 하는 Python 스크립트입니다.

Unix 함수 allexport의 바로 가기입니다.

환경 파일은 소싱됩니다. 즉, source config.env 구문을 사용하여 셸 스크립트에 로드됩니다. -a를 사용하면 환경에 들어가는 .env 파일 내의 모든 변수를 내보낼 수 있습니다.

set +aset -a와 반대로 작동하며 다른 파일이나 코드가 영향을 받지 않도록 변수 내보내기를 끕니다.

코드의 마지막 줄은 python test.py 구문을 사용하여 자식 프로세스를 시작합니다. 환경 내에서 Python 스크립트를 실행하고 Python에서 .env 파일을 읽고 Python 스크립트의 출력을 반환합니다.

셸 스크립트 내부의 코드가 작성되면 해당 EOL을 Unix로 변환한 다음 run.sh와 같은 .sh 확장자로 저장해야 합니다. 환경 파일과 Python 스크립트가 있는 동일한 디렉터리에 파일을 저장합니다.

Bash 내에서 실행될 때 tree 명령은 동일한 디렉토리 내의 세 파일을 모두 표시합니다.

jay@DESKTOP-8MEIQB8:/mnt/c/Users/Win 10/try$ tree
.
├── config.env
├── run.sh
└── test.py

위의 단계를 완료한 후 Bash 스크립트를 실행할 차례입니다.

명령줄 실행기를 사용하여 Bash 스크립트 실행

명령 프롬프트 또는 PowerShell과 같은 명령줄 실행기는 Windows에서 Bash 스크립트를 실행하는 데 도움이 됩니다. 더 나은 옵션은 git-bash를 설치하는 것입니다. 이를 통해 Windows의 모든 디렉토리에서 Bash를 직접 실행할 수 있습니다.

이 섹션에서는 두 가지 방법을 모두 설명합니다.

명령 프롬프트 또는 PowerShell에 Bash 설치

Windows에서 Bash를 실행하려면 Linux용 Windows 하위 시스템 기능 또는 WSL이 켜져 있어야 합니다. Windows 기능 켜기 또는 끄기 옵션에서 찾을 수 있습니다.

시작 메뉴로 이동하여 검색창에서 이 옵션을 검색합니다. 그것을 클릭하면 옵션 목록과 체크 박스가 있는 팝업 창이 열립니다. Linux용 Windows 하위 시스템을 찾을 때까지 아래로 스크롤하고 옆에 있는 확인란을 선택합니다.

Windows에서 WSL이 켜져 있으면 Microsoft Store로 이동하여 Ubuntu와 같은 Linux 배포판을 설치합니다. 설치가 완료되면 컴퓨터를 다시 시작하면 명령 프롬프트와 PowerShell에서 Bash를 사용할 수 있습니다.

제대로 설치되고 작동하는지 확인하려면 명령 프롬프트 또는 PowerShell로 이동하여 bash라고 작성하십시오. 터미널이 Bash로 전환됩니다.

Git-Bash 설치

WSL 방법에 대한 대체 옵션은 Git-Bash 방법입니다. Bash는 Git을 통해 시스템에 직접 다운로드하여 설치할 수 있습니다.

다운로드 후 설치 프로그램을 엽니다. 원하는 설치 위치를 선택하고 다른 모든 설정은 기본값으로 둡니다.

설치 프로그램은 다양한 설정이 포함된 여러 창을 표시하므로 설치가 시작될 때까지 다음을 반복해서 클릭합니다.

셸 스크립트 실행

Python 및 셸 스크립트가 저장된 디렉터리에서 Bash를 시작합니다. Git-bash를 사용하는 경우 디렉토리로 직접 이동하여 마우스 오른쪽 버튼을 클릭하고 Git Bash Here를 선택합니다.

PowerShell 또는 명령 프롬프트를 사용하는 경우 필요한 디렉터리로 이동한 후 Bash 터미널을 수동으로 실행해야 합니다. 디렉토리 내부에서 bash 명령을 입력합니다.

Bash 내부에서 쉘 스크립트를 실행해야 합니다. 이 예에서 셸 스크립트의 이름은 run.sh이므로 셸 스크립트를 실행하는 Bash 명령은 다음과 같습니다.

./run.sh

이렇게 하면 환경이 활성화되고 내부에서 Python 스크립트가 실행되고 출력이 반환됩니다.

Win 10@DESKTOP-8MEIQB8 MINGW64 ~/try
$ ./run.sh
prod
5000

결론

이 문서에서는 Python에서 .env 파일을 읽고 .env 파일에서 환경 변수를 추출한 다음 Python 스크립트에서 사용하는 여러 가지 방법을 설명합니다. 독자는 Python 코드와 .env 파일을 바인딩하는 .env 파일과 셸 스크립트를 쉽게 만들 수 있어야 합니다.

관련 문장 - Python Environment