이번 글에서는 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 함수 그대로, 숫자형일 경우에는 getint나 getfloat를 사용하시면 됩니다. 위에 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')]
혹시 글에서 틀리거나 보완이 필요한 부분이 있으면 댓글로 알려주시길 바랍니다.
<참고>
파이썬(python) 외부 파일을 통한 환경 설정관리 ConfigParser
프로그램 작성시 일부 값들을 따로 외부 파일로 관리하면 좋은 경우가 있습니다. 아래와 같은 경우들 입니다. 1. 여러 프로그램에서 공통 사용하는 값 2. 자주 변경 되는 값 3. 동작 환경이 다를
jinisbonusbook.tistory.com
'Data Analysis > Python' 카테고리의 다른 글
[Python] 결측치 처리 심화 (groupby, transform 함수) (0) | 2023.08.29 |
---|---|
[Python] Python과 PostgreSQL 연동 (0) | 2022.11.24 |
댓글