2012-09-26 2 views
3

Tkinter 위젯으로 일부 사진 보정을 표시하기 위해 하나의 slideshow.py 파일을 만들었습니다.이 파일은 내 창 & 리눅스에서 완벽하게 실행됩니다. 가 내가는 Win32 실행 파일로 컴파일 할 py2exe에를 사용하여, 그것은 설치 파이썬과 TCL없이 윈도우에서 실행했다, setup.py는 간단하다py2exe로 TCL_LIBRARY와 TK_LIBRARY를 수정하는 방법

from distutils.core import setup 
import py2exe 
setup(windows=["slideshow.py"]) 

그럼, 그것은 생성 "파이썬 setup.py py2exe에"실행 c : \ Users \ d2xia \ ccm_wa \ utils \ tfps \에있는 "dist"폴더와 그 아래에 "tcl", "library.zip", "slideshow.exe"등이 있습니다.

나는 slideshow.exe 그 오류를 실행하면 :

Traceback (most recent call last): 
    File "slideshow.py", line 45, in <module> 
    File "Tkinter.pyc", line 1685, in __init__ 
_tkinter.TclError: Can't find a usable init.tcl in the following directories: 
    C:/Users/d2xia/ccm_wa/utils/tfps/lib/tcl8.5 C:/Users/d2xia/ccm_wa/utils/tfps/lib/tcl8.5 C:/Users/d2xia/ccm_wa/utils/lib/tcl8.5 C:/Users/d2xia/ccm_wa/utils/tfps/library C:/Users/d2xia/ccm_wa/utils/library C:/Users/d2xia/ccm_wa/utils/tcl8.5.11/library C:/Users/d2xia/ccm_wa/tcl8.5.11/library 

tcl8.5 및 tk8.5 실제로 "TCL"폴더 아래에있는, 그러나 py2exe에 의해 생성 된 EXE 여전히 아래에 보이는 것 같다 "LIB" 또는 "라이브러리", 올바른 TCL_LIBRARY 및 TK_LIBRARY 설정하지 않는 것 같습니다.

"tcl"의 이름을 "lib"로 변경하더라도 여전히 동일한 오류가 발생합니다.

set TCL_LIBRARY=c:\Users\d2xia\ccm_wa\utils\tfps\dist\tcl\tcl8.5\ 
set TK_LIBRARY=c:\Users\d2xia\ccm_wa\utils\tfps\dist\tcl\tk8.5\ 

다음 slideshow.exe 생성 새로운 오류 :

c:/Users/d2xia/ccm_wa/utils/tfps/dist/tcl/tcl8.5/init.tcl: version conflict for package "Tcl": have 8.5.11, need exactly 8.5.2 
version conflict for package "Tcl": have 8.5.11, need exactly 8.5.2 
    while executing 
"package require -exact Tcl 8.5.2" 
    (file "c:/Users/d2xia/ccm_wa/utils/tfps/dist/tcl/tcl8.5/init.tcl" line 20) 
    invoked from within 
"source c:/Users/d2xia/ccm_wa/utils/tfps/dist/tcl/tcl8.5/init.tcl" 
    ("uplevel" body line 1) 
    invoked from within 
"uplevel #0 [list source $tclfile]" 

나는 C에서 티클 8.5.11이 : \ APPS \ 자식 \ lib 디렉토리 \ tcl8.5 및 C 티클 8.5.2 : \ Python27 \ tcl \ tcl8.5 python으로 실행하면 python 설치 경로에서 tcl을 찾지 만 py2exe는 git 설치 경로에서 다른 복사본을 찾습니다.

그렇다면 질문은 이됩니다. 1. dist를 만들 때 올바른 tcl8.5 복사본을 py2exe에 "할당"하는 방법은 무엇입니까? 2. 생성 된 실행 파일이 dist의 tcl 경로를 인식하도록하는 방법은 무엇입니까? "lib"또는 "library"대신 "tcl"

답변

6

Tcl 버전 8.5.11 & 8.5.2 tcl8.5, tk8.5, tcl85.dll 및 tk85.dll을 수동으로 python 설치 경로, 나는 또한 경로 환경 변수를 변경하여 해결할 수 있다고 생각합니다.

set TCL_LIBRARY=.\tcl\tcl8.5\ 
set TK_LIBRARY=.\tcl\tk8.5\ 
slideshow.exe %1 

이 작동, 더 좋은 아이디어 : 수동으로 TCL_LIBRARY 및 TK_LIBRARY을 설정하는 하지만 여전히 한 나는 창을 배치 래퍼 TEST.BAT을했다?

+0

훌륭한 솔루션이지만, 왜 py2exe가이 문제를 일으키는 지에 대한 간단한 설명이 있습니까? 이거 버그 야? 이것이보고 되었습니까? – ecoe

2

올바른 Tcl 및 Tk 설치는 빌드 중에 빌드 된 환경 변수의 올바른 값을 갖습니다. 그들은 설치 전에 테스트를 허용하기 위해서만 존재합니다 (Tcl/Tk의 개발자에게는 매우 유용합니다. 다른 모든 사람들에게는 권장하지 않습니다). 제대로 연결되어 있지 않거나 잘못된 버전의 스크립트 라이브러리를 찾으면 설치에 심각한 문제가 있습니다. (이것은 설치 후 일반적으로 주변을 움직여서는 안되지만 대부분의 사람들에게는 문제가되지 않는다.)

Tcl 및 Tk 설치를 지우는 것이 일반적인 조언이다. 다시 시작하여 올바른 설치 위치가 --prefix 옵션을 통해 configure으로 지정되었는지 확인하십시오. 믹스에 파이썬을 추가하면 어떻게 영향을 미치는지 전혀 모르겠습니다.