Python에서 구성 파일을 어디에 넣을까요?
개발 모드에서는 다음과 같은 디렉토리 트리가 있습니다.
| my_project/
| setup.py
| my_project/
| __init__.py
| main.py
| conf/
| myproject.conf
ConfigParser 를 사용 하여 myproject.conf
파일 을 구문 분석 합니다.
내 코드에서 좋은 경로로 파일을로드하는 것은 쉽습니다. my_project/conf/myproject.conf
문제는 : 나는 setup.py를 사용하여 내 프로젝트를 설치하는 경우, 구성 파일에 (setup.py 덕분에) 위치하고 있습니다 /etc/my_project/myproject.conf
과에서 내 응용 프로그램 /usr/lib/python<version>/site-packages/my_project/
.
my_project/conf/myproject.conf
"프로덕션"모드에서 내 프로젝트에서 내 파일을 참조 하고 "개발"모드에서 로컬 파일 ( my_project/conf/myproject.conf
)을 참조하려면 어떻게해야합니까 ?
또한 가능하면 이동하고 싶습니다 (예 : Windows에서 작업).
그렇게하는 좋은 방법은 무엇입니까?
구성 파일이 어떻게 작동하는지 보셨습니까? 때때로 호출되는 "rc"파일을 읽어보십시오. "bashrc", "vimrc"등
일반적으로 구성 파일에 대한 다단계 검색이 있습니다.
로컬 디렉토리.
./myproject.conf
.사용자의 홈 디렉토리 (
~user/myproject.conf
)표준 시스템 전체 디렉토리 (
/etc/myproject/myproject.conf
)환경 변수 (
MYPROJECT_CONF
)로 명명 된 장소
Python 설치는 마지막으로 볼 수있는 곳입니다.
config= None
for loc in os.curdir, os.path.expanduser("~"), "/etc/myproject", os.environ.get("MYPROJECT_CONF"):
try:
with open(os.path.join(loc,"myproject.conf")) as source:
config.readfp( source )
except IOError:
pass
appdirs의 패키지는 다양한 플랫폼에 설치된 앱의 표준 장소를 찾는에 좋은 일을한다. 개발자에게 일종의 "설치되지 않은"상태를 발견하거나 허용하도록 확장하는 것이 합리적 일지 궁금합니다.
을 사용하는 경우 비 패키지 데이터 파일 사용에setuptools
대한 장을 참조하십시오 . 파일을 직접 찾으려고하지 마십시오.
또 다른 옵션은 'boto'처럼 모든 .cfg
및 .ini
파일을 홈 디렉토리에 보관하는 것입니다.
import os.path
config_file = os.path.join(os.path.expanduser("~"), '.myproject')
나는 그것을 처리하는 깨끗한 방법이 없다고 생각합니다. 개발 모드에서 작동하는 '로컬'파일의 존재 여부를 테스트하기 만하면됩니다. 그렇지 않으면 프로덕션 경로로 돌아갑니다.
import os.path
main_base = os.path.dirname(__file__)
config_file = os.path.join(main_base, "conf", "myproject.conf")
if not os.path.exists(config_file):
config_file = PROD_CONFIG_FILE # this could also be different based on the OS
참조 URL : https://stackoverflow.com/questions/7567642/where-to-put-a-configuration-file-in-python
'programing' 카테고리의 다른 글
나는“이혼”을 겪고 있습니까? (0) | 2021.01.15 |
---|---|
Setup () 대 SetupGet () (0) | 2021.01.15 |
Popen.communicate 이해 (0) | 2021.01.15 |
ASP.NET MVC 4, HttpException을 throw하고 HttpStatusCodeResult를 반환합니까? (0) | 2021.01.15 |
Maven 저장소에서 오래된 종속성을 정리하는 방법은 무엇입니까? (0) | 2021.01.15 |