본문 바로가기
Data Analysis/Python

[Python] Configuration 관리 및 사용

by Toritol 2023. 4. 21.
728x90

출처 : https://gislite.com/post/14871

 

 이번 글에서는 Python에서 Configuration을 관리하고 사용하는 방법에 대해 살펴볼 예정입니다. Python을 비롯하여 대부분의 프로그래밍 언어를 사용하다 보면, 여러 코드에서 공통적으로 동일한 변수를 사용하게 되고, 변경될 때마다 각 코드에서 수정을 하신 경험이 있으실 겁니다. 이러한 경우에 사용하면 효율적인 것이 configuration을 활용하는 것입니다. 사용 방법에 대해 순서대로 설명하겠습니다.

 

1. Configuration 파일 생성 및 관리

 우선 configuration으로 관리하고자 하는 변수들을 선정해주고, ini 확장자로 각 변수들을 할당해 줍니다. 예시는 아래와 같으며, DB 접속 정보를 configuration으로 관리하는 예시를 보여드리고자 합니다.

<test_config.ini>

[DB]
DB_HOST = 127.0.0.1
DB_PORT = 1521
DB_NM = my_db
DB_USER = user
DB_PWD = password
TABLE_NM = test_table

 

 DB 접속 관련 옵션 외에도 실제 업무에서는 DL 모델을 생성하는데 필요한 hyper-parameter도 config 파일로 관리하고 있으니, 각자의 분석 환경에 맞게 설정하시면 됩니다.

 

2. Python에서의 Configuration 사용

 위에서 생성한 config 파일을 사용하기 위해서는 configparser 패키지가 필요합니다. import한 이후 함수를 활용하여 read하면 끝입니다.

<test_config.py>

import configparser

config = configparser.ConfigParser()
config.read('./utils/test_config.ini')

 

 이제 config 파일에 입력한 변수들을 활용해보겠습니다. 기본적으로는 다음과 같은 형식으로 변수들을 불러옵니다. 불러온 변수들은 기존에 python에서 사용하던 것처럼 사용하면 됩니다.

<test_config.py>

host = config['DB']['DB_HOST']
port = config['DB']['DB_PORT']
dbname = config['DB']['DB_NM']
user = config['DB']['DB_USER']
pwd = config['DB']['DB_PWD']

 

 변수를 불러오는 것은 get 함수로도 가능합니다. 문자형일 경우에는 get 함수 그대로, 숫자형일 경우에는 getintgetfloat를 사용하시면 됩니다. 위에 config에는 입력하지 않았지만, config에 hyper-parameter 관련 변수들도 있다고 가정하고 코드를 작성하였습니다.

<test_config.py>

# DB
dbname = config.get('DB', 'DB_NM')

# DL Model
epoch = config.getint('DL_PARAM', 'EPOCH')
initial_lr = config.getfloat('DL_PARAM', 'INITIAL_LR')

 

3. Configuration 응용

 config에 리스트를 활용하는 것도 가능합니다. 하지만 위의 방식을 그대로 사용하면 리스트 전체가 하나의 문자열 데이터로 인식되기 때문에, eval 함수를 같이 쓰셔야 합니다. 아래의 첫 번째 코드는 config 파일, 두 번째 코드는 python 코드 예시입니다.

<test_config_2.ini>

[LIST]
IMP_LIST = ['a', 'b', 'c', 'd']

 

<test_config.py>

imp_list = eval(config['LIST']['IMP_LIST'])

 

 이외에도 sections 함수를 통해 section 정보를 출력하는 것도 가능하고, options 함수를 통해서는 해당 section의 변수들, items 함수를 통해서는 해당 section의 변수명과 값까지 출력할 수 있습니다. 예시는 아래와 같습니다.

>>> config.sections()
['DB']

>>> config.options('DB')
['DB_HOST', 'DB_PORT', 'DB_NM', 'DB_USER', 'DB_PWD', 'TABLE_NM']

>>> config.itmes('DB')
[('DB_HOST', '127.0.0.1'),
 ('DB_PORT', '1521'),
 ('DB_NM', 'my_db'),
 ('DB_USER', 'user'),
 ('DB_PWD', 'password'),
 ('TABLE_NM', 'test_table')]

 

 혹시 글에서 틀리거나 보완이 필요한 부분이 있으면 댓글로 알려주시길 바랍니다.

 

 

<참고>

https://jinisbonusbook.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%ACpython-%EC%99%B8%EB%B6%80-%ED%8C%8C%EC%9D%BC%EC%9D%84-%ED%86%B5%ED%95%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95%EA%B4%80%EB%A6%AC-ConfigParser

 

파이썬(python) 외부 파일을 통한 환경 설정관리 ConfigParser

프로그램 작성시 일부 값들을 따로 외부 파일로 관리하면 좋은 경우가 있습니다. 아래와 같은 경우들 입니다. 1. 여러 프로그램에서 공통 사용하는 값 2. 자주 변경 되는 값 3. 동작 환경이 다를

jinisbonusbook.tistory.com

 

 

 

728x90

댓글