programing

Python에서 구성 파일을 어디에 넣을까요?

goodcopy 2021. 1. 15. 19:16
반응형

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"등

일반적으로 구성 파일에 대한 다단계 검색이 있습니다.

  1. 로컬 디렉토리. ./myproject.conf.

  2. 사용자의 홈 디렉토리 ( ~user/myproject.conf)

  3. 표준 시스템 전체 디렉토리 ( /etc/myproject/myproject.conf)

  4. 환경 변수 ( 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

반응형