2013-10-25 5 views
1

파이썬 패키지에 스크립트가있는 경우 __file__/usr/lib/python3.3/site-packages/mypackage/myscript이 아닌 (예 : /usr/bin/myscript)이 포함되어 있기 때문에 어떻게 패키지에서 다른 파일을 읽을 수 있습니까? 경로 이름에 따라 스크립트의 패키지 파일 사용

(파일이 아니라 모듈 단지 템플릿입니다.)

답변

3

당신은이 ResourceManager APIpkg_resources 'setuptools에서 사용할 수 있습니다.

정상적인 지퍼 달걀에서도 작동합니다. 그러나이 경우 setuptools이 설치되어 있어야합니다. 표준 라이브러리 만 사용하는 솔루션 (권장)은 @ abarnert의 대답을 참조하십시오.

5

아무것도 작동하지 패키지, 또는 전체 사이트 패키지 때문에, 말하자면하는 ZipFile를 할 수도 있고, 파일 월합니다 패키지 내부 이외의 곳에 설치되었습니다.

pkgutil 모듈, 특히 get_data 기능은 패키지의 일부인 데이터 파일의 내용을 가져 오는 stdlib 방법입니다.

파일의 첫 번째 위치에 파일이 실제로 있는지 확인하는 방법에 대한 자세한 내용은 Installing Package DataInstalling Additional Files을 참조하십시오.

stdlib 대신 setuptools을 사용하려는 경우 pkg_resources을 사용하면 더 쉽고 유연하게 작업 할 수 있습니다.

import pkg_resources 
my_stream = pkg_resources.resource_stream(__name__, "foo.dat") 

예를 들어 파일 - 류의 객체 my_streammy.package/my/package/foo.dat 열립니다 :

+0

+1 stdlib 전용 –

+0

음 ... 다음은 추가 파일을 설치하면'/ usr'에 바로 넣을 수 있습니다. 패키지와 관련된 장소에 배치 할 수있는 방법이 있습니까? – Ryan

+0

@minitech : 예; 그것들은 상대 경로이므로,''foo ''대신에''share/myapp/foo''를 그냥 할 수 있습니다. 모든 플랫폼에서 플랫폼 친화적 인 방식으로이를 시도하는 것은 그리 재미있는 일이 아닙니다. 복잡하고 크로스 플랫폼을 필요로한다면'setuptools'를 사용하십시오. – abarnert