개요
파이썬 파일에는 다양한 변수들을 쉽고 편하게 저장할 수 있다. 이는 파이썬 인터프리터가 구문분석을 통해 파일을 구조화하기 때문이다. 그래서 파이썬으로 개발을 하다 보면 컨피그 파일을 .py 파일로 구성하여 사용하곤 한다. 파이썬 파일로 구성된 컨피그는 dict와 같은 자료구조로 변수들을 쉽고 편하게 저장해둘 수 있기 때문이다.
하지만 문제는 이러한 컨피그 파일이 프로젝트의 포함된 코드가 아니라 프로젝트 외부로부터 입력받아야하는 상황에서 발생한다. 예를 들어 어떤 개발자가 파이썬으로 만든 실행파일을 배포한다고 했을 때, 컨피그파일이 이미 프로젝트의 일부로 들어가 있다면 실행파일에 포함되어버릴 것이다. 이 문제를 해결하기 위해 literal_eval을 이용하면 컨피그를 외부로부터 입력받고, 파이썬 구문분석을 통해 이전에 이용하던대로 사용할 수 있다.
예제
다음은 파이썬으로 구성된 컨피그 파일이다. 파이썬의 구문분석이 동작하기 때문에 json 파일을 dict의 형태로 작성할 수 있다. 이는 컨피그 작성에 굉장히 편리하다.
settings = {
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "secret"
},
"features": {
"enable_logging": True,
"debug_mode": False
}
}
이 파일은 원래 다음과 같은 형태로 참조되어 사용될 것이다.
import config
print(config.settings)
하지만 이 코드는 import를 이용하는데, 이는 config.py라는 파일이 이미 프로젝트에 포함되어 있기에 가능한 것이다.
그러므로 코드 외부에서 컨피그를 넣어줄 수 있도록 해야한다. 다음 코드를 보자.
import ast
# load the content of the config file as a string
with open("config.py", "r") as file:
config_content = file.read()
# extract the dictionary part using literal_eval
config_dict = ast.literal_eval(config_content.split('=', 1)[1].strip())
# now you can access the configuration dictionary
print(config_dict)
print("Database host:", config_dict["database"]["host"])
print("Logging enabled:", config_dict["features"]["enable_logging"])
여기에서는 literal_eval을 통해 config.py 파일을 읽은 문자열에 대해 파이썬 구문분석을 수행한다. 그 이후 파이썬에서 사용 가능한 변수의 형태로 바꾸어준다. 이 방법을 이용한다면 파이썬 파일로 구성된 컨피그를 외부에서 넣어줄 수 있다.
'프로그래밍 > Python' 카테고리의 다른 글
[Python] PyInstaller, PyArmor를 이용한 파이썬 패키징 (0) | 2024.08.15 |
---|---|
[Python] Python의 모듈 참조 (0) | 2024.05.29 |