ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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, ...  (빨간색 부분은 생성해야함)


    세팅

    직접 파일생성하여 실행할 경우

    1. env.py를 생성하여 위에 작성된 코드를 넣습니다.
    2. main이나 데이터베이스를 호출하는 파일에서 from env import get를 넣어줍니다.
    3. get() 함수를 사용

    pip로 다운로드받아서 사용할 경우

    virtualenv를 사용하는데 터미널에서 그냥 해당 명령어를 실행시켜 다운로드 받을 경우, 파이썬의 인터프리터는 virtualenv를 바라보고 있는데 설치는 virtualenv가 아닌 파이썬 자체에 모듈이 설치되기 때문에 인식을 할 수 없습니다.

    virtualenv를 사용할 경우

    1. 터미널 실행
    2. 사용하고 있는 virtualenv 폴더로 이동
    3. source bin/activate 명령어 실행
    4. pip3 install --trusted-host ip주소 --index-url http://ip주소/simple/ env 명령어 실행

    5. from env import get를 추가하여 get()함수를 사용

    virtualenv를 사용하지 않는 경우

    1. 터미널 실행
    2. pip3 install --trusted-host ip주소 --index-url http://ip주소/simple/ env 명령어 실행
    3. 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을 입력하면 올라와있는 서버의 패키지를 확인할 수 있습니다.


    댓글