-
[Python] 환경변수 분리언어/파이썬 & 장고 2016. 5. 21. 11:53
이전 장고의 settings.py 파일을 분리했던 것과 같은 이유로 환경변수를 분리하는 방법을 설명하겠습니다.
코드
import sys def get(func): try: for i in range(1, len(sys.argv)): settings_str = "--settings=" settings_index = sys.argv[i].find(settings_str) # 받은 argument 중 좌변이 환경변수 분리 키 값일 경우, 우변의 값을 경로를 저장합니다. if settings_index != -1: # 입력받은 값을 변수에 저장 actions = sys.argv[i][settings_index + len(settings_str):] # 받은 값으로 import로 선언 tmp = __import__(actions) # 선택할 settings 파일명만 선택 env_name = actions[actions.rfind(".") + 1:] # 위에서 구한 함수이름으로 호출 instance = getattr(tmp, env_name) except Exception as e: # 아무 입력안될 시, 에러를 내고 프로그램 종료 print(e) print("입력한 파라미터를 확인해주세요") exit() try: # 파라미터로 받은 값을 사용해 동적으로 함수 및 변수들을 호출 return getattr(instance, func) except Exception as e: raise e
databases = { 'default': { 'DBNAME': 'postgres', 'USER': 'postgres', 'PASSWORD': '1234', 'HOST': '127.0.0.1', 'PORT': '5432' }, 'other': { 'DBNAME': 'postgres2', 'USER': 'postgres', 'PASSWORD': '1234', 'HOST': '127.0.0.1', 'PORT': '5432' } }
from env import get # default로 정의되어 있는 데이터베이스 정보를 호출하고 싶은 경우, get('databases')['default']
파일경로
untitled(패키지) / settings(폴더) / base.py, local.py, ... (빨간색 부분은 생성해야함)
세팅
직접 파일생성하여 실행할 경우
- env.py를 생성하여 위에 작성된 코드를 넣습니다.
- main이나 데이터베이스를 호출하는 파일에서 from env import get를 넣어줍니다.
- get() 함수를 사용
pip로 다운로드받아서 사용할 경우
virtualenv를 사용하는데 터미널에서 그냥 해당 명령어를 실행시켜 다운로드 받을 경우, 파이썬의 인터프리터는 virtualenv를 바라보고 있는데 설치는 virtualenv가 아닌 파이썬 자체에 모듈이 설치되기 때문에 인식을 할 수 없습니다.
virtualenv를 사용할 경우
- 터미널 실행
- 사용하고 있는 virtualenv 폴더로 이동
- source bin/activate 명령어 실행
pip3 install --trusted-host ip주소 --index-url http://ip주소/simple/ env 명령어 실행
from env import get를 추가하여 get()함수를 사용
virtualenv를 사용하지 않는 경우
- 터미널 실행
- pip3 install --trusted-host ip주소 --index-url http://ip주소/simple/ env 명령어 실행
- from env import get를 추가하여 get()함수를 사용
실행법
파이참에서 실행할 경우
상단 메뉴 탭의 Run - Run... - Edit Configrations... Script parameters에 환경변수가 들어있는 폴더 및 파일명을 작성합니다.
예)
현재버전은 Script Parameters 부분에 --settings=settings.base 로 입력해야 합니다.
터미널에서 실행할 경우
python 실행파이썬파일 폴더.파일 과 같은 형식으로 호출합니다.
예) python main.py --settings=settings.base
사용법
settings
- local.py
main.py
databases = { 'default': { 'DBNAME': 'postgres', 'USER': 'postgres', 'PASSWORD': '1234', 'HOST': '127.0.0.1', 'PORT': '5432' }, 'other': { 'DBNAME': 'postgres2', 'USER': 'postgres', 'PASSWORD': '1234', 'HOST': '127.0.0.1', 'PORT': '5432' } }
from env import get print(env('databases')['default'])
와 같이 폴더 구조와 local.py, main.py의 코드가 잡혀있다고 가정합니다.
위 세팅법을 통해 먼저 설치를 한 후, main.py에 from env import get를 추가합니다.
다음 터미널에서 python main.py --settings=settings.local을 입력하여 main.py를 실행시킵니다.
실행결과는 local.py 파일의 databases라는 dict 변수를 읽고 그 중, default에 정의되어 있는 DB 정보를 출력하게 됩니다.
privated pypi 서버
privated pypi서버에 올라온 패키지들의 목록이 궁금하면 등록ip주소/simple url을 입력하면 올라와있는 서버의 패키지를 확인할 수 있습니다.