옵션 1 : 패키지 데이터로 설치
Python 패키지의 루트 내에 데이터 파일을 배치 할 때의 가장 큰 장점은 Windows, Mac, Linux, 일부 모바일 플랫폼 또는 Egg 내부와 같은 사용자 시스템에서 파일이 어디에 있는지 걱정하지 않아도된다는 것입니다. data
설치 위치 나 방법에 관계없이 항상 Python 패키지 루트와 관련된 디렉토리를 찾을 수 있습니다 .
예를 들어 다음과 같은 프로젝트 레이아웃이있는 경우 :
project/
foo/
__init__.py
data/
resource1/
foo.txt
에 함수를 추가 __init__.py
하여 데이터 파일의 절대 경로를 찾을 수 있습니다 .
import os
_ROOT = os.path.abspath(os.path.dirname(__file__))
def get_data(path):
return os.path.join(_ROOT, 'data', path)
print get_data('resource1/foo.txt')
출력 :
/Users/pat/project/foo/data/resource1/foo.txt
프로젝트가 Egg로 설치되면 경로 data
가 변경되지만 코드는 변경할 필요가 없습니다.
/Users/pat/virtenv/foo/lib/python2.6/site-packages/foo-0.0.0-py2.6.egg/foo/data/resource1/foo.txt
옵션 2 : 고정 된 위치에 설치
대안은 Python 패키지 외부에 데이터를 배치 한 다음 다음 중 하나를 수행하는 것입니다.
- 의 위치를 가지고
data
구성 파일을 통해 전달을 명령 행 인수 또는
- Python 코드에 위치를 포함합니다.
프로젝트를 배포 할 계획이라면 이것은 훨씬 덜 바람직합니다. 당신이 경우 정말 이 작업을 수행하려면, 당신은 당신을 설치할 수 있습니다 data
당신은 튜플의리스트를 전달하여 각 파일 그룹에 대한 대상을 지정하여 대상 시스템에서 원하는 위치 :
from setuptools import setup
setup(
...
data_files=[
('/var/data1', ['data/foo.txt']),
('/var/data2', ['data/bar.txt'])
]
)
업데이트 : Python 파일을 재귀 적으로 grep하는 셸 함수의 예 :
atlas% function grep_py { find . -name '*.py' -exec grep -Hn $* {} \; }
atlas% grep_py ": \["
./setup.py:9: package_data={'foo': ['data/resource1/foo.txt']}