2009-08-02 2 views
11

플랫폼 독립적 PyQt 애플리케이션을하고 있습니다. setuptools를 사용하여 setup.py 파일을 작성하려고합니다. 지금까지 플랫폼 검색에 참여했습니다. Windows에서 py2exe를 사용하기 위해 플랫폼에 따라 setup()에 대한 특정 옵션로드 ... 등 ...distutils/setuptools 전후의 데이터 파일 접근하기

그러나 내 응용 프로그램에서는 일부 테마, HTML 및 이미지를 배포 할 때이 이미지를로드해야합니다. 런타임시 응용 프로그램에서. 지금까지는 응용 프로그램의 테마/디렉토리에 저장되었습니다.

나는 setuptools와 distutils에 대한 문서를 읽었으며, "share/MyApp/themes /"에 설치 될 themes/디렉토리에있는 모든 파일들로 setup()에 data_files 옵션을 주었다면 알아 냈다./usr/접두사 또는 플랫폼에있는 sys.prefix와 함께 설치됩니다. os.path.join (sys.prefix, "share", "MyApp", "themes") nomatter를 사용하여 데이터 파일을 찾을 수 있다고 가정합니다.

그러나 개발 도중에 응용 프로그램 소스와 관련된 테마/디렉토리에있는 데이터 파일에 액세스 할 수 있기를 원합니다. 어떻게해야합니까? 응용 프로그램이 설치되었는지 알아내는 현명한 방법이 있습니까? 또는 현재 위치에 상관없이 데이터 파일에 매핑되는 유틸리티?

소스와 관련된 테마가 있는지 또는 sys.prefix/share ... 등등과 관련된 모든 종류의 추한 해킹을 추가하는 것이 정말 싫습니다. 개발 과정에서 데이터 파일을 어떻게 찾을 수 있습니까? 임의의 플랫폼에 설치 한 후?

답변

5

나는 data_file에라는 유틸리티 방법을 사용했습니다 :

def data_file(fname): 
    """Return the path to a data file of ours.""" 
    return os.path.join(os.path.split(__file__)[0], fname) 

내가 파일 상대를 얻을 수 내 프로젝트에서 초기화 평 파일에 넣고, 다음 내 패키지 어디에서 호출

패키지에.

Setuptools는 비슷한 기능을 제공하지만 setuptools는 필요하지 않습니다.

+0

data_files가/usr/share/AppName/themes/에 설치되어있을 때 어떻게 작동합니까? 내 실행 파일은/usr/lib/AppName과 비슷합니다 ... DistUtils 설명서에 나와 있습니다. sys.prefix와 함께 데이터 파일에 저장된 상대 경로 접두어로 설치됩니다. * nix 시스템의 데이터 파일은/usr/share/AppName/ – jonasfj

+1

에 있어야합니다. setup.py의 package_data 옵션. data_files에 대해 확실하지 않습니다. –

+0

좋아요 ... 그래, package_data도 옵션입니다. 아마도 그걸로 가야 할 것 같습니다 ... 데비안 호환 패키지를 생성하지 않을 것이라고 생각합니다 :) – jonasfj

7

당신은 pkg_resources을 시도 할 수 :

my_data = pkg_resources.resource_string(__name__, fname) 
+0

내 데이터 파일이 xx.egg에 설치됩니다. root 인 반면 resource string은 __name__ (마녀가 'xxx.egg/package/subpackage'에 있음)에서 가져 오려고 시도하지만 항상 실패합니다. –

+0

@JensTimmerman : 링크를 클릭하십시오 : * "resource_name 인수는 명명 된 패키지"*와 관련하여 해석됩니다. 그래서 파일이 xxx의 패키지 디렉토리에 설치 되었다면; '__name__' 대신 xxx를 사용하거나 하위 패키지 디렉토리에 파일을 설치하도록 구성하십시오. – jfs

+0

글쎄, 그들은 계란의 루트에 설치되어 있으므로 빈 문자열을 사용하는 기본 패키지 디렉토리는 작동하지 않습니다. 어쨌든 소스 옆에 바로 설치되도록 구성해야한다면 더 쉽게 만들 수있는 것 같지 않습니다 ... –