2010-01-08 4 views
14

응용 프로그램을 구성하기 위해 ConfigParser를 사용하고 있으며 이제이를 쉽게 배포 할 수있게하면서 동시에 구성 가능성을 유지하려고합니다.구성 파일이있는 Python 응용 프로그램 패키지

나는 구성 파일 템플리트가있는 디렉토리가 필요하다고 생각하고 실제로 이들을 사용하는 구성을 생성하는 몇 가지 방법이 필요하다. 그런 다음 virtualenv, 사용자 홈 디렉토리 등에서 작동하는 저장소를 저장해야합니다. 정상적인 Unix 패키지가 작동하는 방식, 즉 홈 디렉토리에서 재정의되는 설정과 비슷하게 사용하고 싶습니다. 이것에 대한 readymade 솔루션이 있는가? 그렇지 않다면, 내가 원하는대로 작동하게하려면 setup.py에 무엇을 넣어야합니까?

답변

9

data_files 옵션을 distutils으로 사용하여 원하는 곳에 파일을 설치할 수 있습니다. 존재하는 경우

setup(..., 
     data_files=[('/etc', ['cfg/config1.ini', 'cfg/config2.ini']), 
        ('/etc/init.d', ['bin/initscript1'])], 
     .... 
    ) 

하여 응용 프로그램의 구성 파일을 읽고, 당신은 .read() method of ConfigParser objects를 사용하여 /home 버전을 병합 할 수 있습니다 :

files_read = cfgparserobj.read(['/etc/config1.ini', 
           os.path.expanduser('~/.config1.ini')]) 
for fname in files_read: 
    print "Reading config from", fname 

data_files

는 다음과 같은 방법으로 (directory, files)쌍 순서를 지정합니다

그러면 /etc/config1.ini으로 읽은 다음 사용자 홈 디렉토리에있는 .config1.ini에서 오는 항목으로 정의를 덮어 씁니다 (있는 경우).

+6

virtualenv로이 작업을 멋지게 만들 수있는 방법이 있습니까? 나는. myvirtenv/etc/myconf.ini 파일에 어떤 경로를 지정해야합니까? –

+4

이 게시물은 오래된 게시물이지만 여전히 유용 할 수 있습니다. @JoakimLundborg : 기본적으로''/ usr'' 인''sys.prefix''와''sys.real_prefix''에 실제 접두어가 붙은 가상 기관의 경로를 사용할 수 있습니다. – linkdd

+0

sys .real_prefix는 매우 유망한 것으로 보입니다. 런타임에 동일한 위치를 가져 와서 거기에서 구성 파일을 읽는 방법도 필요합니다. 그 목적으로도 사용할 수 있습니까? – a1an

관련 문제