2015-01-18 4 views
0

그래서 .. 내 프로그램에이 작은 문제가 있습니다. 내가 설명하는 몇 가지 기본적인 것들을 필요로 할 수도 있습니다 - 특히 물건들이 distutils를 통해 설치 될 때 어떤 일이 일어나는가?Python에서 데이터 파일을 올바르게로드하는 방법

Tkinter에서 만든 GUI 응용 프로그램에서 사용하고있는 두 개의 아이콘이 있습니다. 위치 때문에로드하는 데 문제가 있습니다.

setup.py 파일 here을 볼 수 있습니다. 28 번 줄에 지정된 파일 (하위 폴더 gui/에 있음)을 볼 수 있습니다.

물론이 문제는 프로그램의 GUI 부분을 실행하려고 할 때 시작됩니다 (설치 및 실행으로 실행 가능하며 실행 파일은 flashstudy --gui). 파일 main.py의 44 행 &45에 오류가 발생합니다 (파일은 here입니다). 해당 위치에서 이미지를로드 할 수 없습니다.

설치하는 동안 파일이 전송 된 디렉토리를 살펴보아야하지만 그 위치와 위치를 쉽게로드하는 방법을 모르기 때문에 이해가되는 것 같습니다.

또 다른 이유는 그것이 설치되어있는 이유입니다. 설치하지 않고 터미널에서 프로그램과 GUI 부분을 직접 실행할 수 있기 때문에 그 기능을 유지하고 싶습니다.

어떻게 든 할 수있는 방법이 있습니까?

답변

1

distutils 대신 setuptools을 사용하는 경우 데이터 파일의 설치 방법에 관계없이 설치 후에 데이터 파일을 안정적으로 포함하고 다시로드 할 수 있습니다.

setuptools을 이미 가져 왔지만 무시하고 있습니다. 오히려 distutils.core에서 수입 setup보다 setuptools에서 가져 :

from setuptools import setup 

package_data 또는 include_package_data가, 오히려 data_files 옵션보다 이미지를 포함 할 수 있습니다. setuptools 문서에 Including Data Files를 참조하십시오

package_data = {'gui': ['*.gif']} 

그런 다음 pkg_resourcesResource API와 패키지 데이터를로드 할 수 있습니다. Tkinter를 PhotoImage 개체의 당신은 파일 이름이 필요합니다, 그래서 당신은 사용할 수 있습니다 : 개인적으로

icon_up = PhotoImage(
    file=pkg_resources.resource_filename('flashCardStudy', 'gui/up.gif')) 

, 내가 대신 소스에서 base64로 데이터 문자열을 포함 할 것, 그리고 사용하는 아이콘과 같은 :

icon_up_data = '''\ 
    R0lGODlhEAAQAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAAQABAAAAIflI+pywfQ0ovuQWpv 
    y3PzyHVKKErkQlpjqhmsSsVRAQA7 
''' 
icon_up = PhotoImage(data=icon_up_data) 

이것은 전체 이슈를 모두 우회합니다. 그러나 이것은 GIF 이미지에만 적용됩니다.

+0

자원을 올바르게 가르쳐 주셔서 감사합니다. 어떤 이유로'setuptools '에 PIP와 함께 사용하기 전에 몇 가지 문제가 있었는데, 나는 꽤 기억이 나지 않습니다. 그리고'distutils'로 전환했을 때 나는 그 문제를 없앴습니다. 어쨌든 나는'setuptools'를 다시 시도해 더 나은 결과가 나오는지 살펴볼 것입니다. 나는 base64 데이터를 사용하는 것이 가장 간단하다는 것을 알았다. 그래서 나는 그걸 가지고 갔다. 어쨌든이 두 이미지 만 사용하므로 파일을 가져올 가치가 없습니다. – user3056783