파이썬 패키지에 스크립트가있는 경우 __file__
에 /usr/lib/python3.3/site-packages/mypackage/myscript
이 아닌 (예 : /usr/bin/myscript
)이 포함되어 있기 때문에 어떻게 패키지에서 다른 파일을 읽을 수 있습니까? 경로 이름에 따라 스크립트의 패키지 파일 사용
1
A
답변
3
당신은이 ResourceManager APIpkg_resources
'setuptools
에서 사용할 수 있습니다.
정상적인 지퍼 달걀에서도 작동합니다. 그러나이 경우 setuptools
이 설치되어 있어야합니다. 표준 라이브러리 만 사용하는 솔루션 (권장)은 @ abarnert의 대답을 참조하십시오.
5
아무것도 작동하지 패키지, 또는 전체 사이트 패키지 때문에, 말하자면하는 ZipFile를 할 수도 있고, 파일 월합니다 패키지 내부 이외의 곳에 설치되었습니다.
pkgutil
모듈, 특히 get_data
기능은 패키지의 일부인 데이터 파일의 내용을 가져 오는 stdlib 방법입니다.
파일의 첫 번째 위치에 파일이 실제로 있는지 확인하는 방법에 대한 자세한 내용은 Installing Package Data 및 Installing Additional Files을 참조하십시오.
stdlib 대신 setuptools
을 사용하려는 경우 pkg_resources
을 사용하면 더 쉽고 유연하게 작업 할 수 있습니다.
import pkg_resources
my_stream = pkg_resources.resource_stream(__name__, "foo.dat")
예를 들어 파일 - 류의 객체 my_stream
로 my.package/my/package/foo.dat
열립니다 :
+1 stdlib 전용 –
음 ... 다음은 추가 파일을 설치하면'/ usr'에 바로 넣을 수 있습니다. 패키지와 관련된 장소에 배치 할 수있는 방법이 있습니까? – Ryan
@minitech : 예; 그것들은 상대 경로이므로,''foo ''대신에''share/myapp/foo''를 그냥 할 수 있습니다. 모든 플랫폼에서 플랫폼 친화적 인 방식으로이를 시도하는 것은 그리 재미있는 일이 아닙니다. 복잡하고 크로스 플랫폼을 필요로한다면'setuptools'를 사용하십시오. – abarnert