2016-05-08 35 views
5

我已經構建了一個使用Tkinter的Python(2.7)應用程序,並且正在嘗試使用Pyinstaller(3.2)構建Windows7 .exe。該應用的工作方式在窗口發現是我將它運行爲python myapp.py,但一旦編譯成pyinstaller分配,我得到這個錯誤信息:pyinstaller和Tkinter

ImportError: No module named Tkinter 

只是可以肯定,myapp.py的頂部包含:

from copy import deepcopy 
import cPickle as pickle 
import Tkinter as tk 
from PIL import ImageTk 

檢查分發目錄,我看到tk85.dll,tcl85.dll和兩個目錄,看到相關的,TCL /和TK/

我發現二次Tkinter的依賴,許多文獻如matplotlib其中進口Tkinter itslef,但我沒有發現了像這樣的任何直接依賴的細節。

任何想法如何讓這個工作?

+0

我將Python腳本轉換爲exe,但發現PyInstaller創建問題。嘗試使用Cx_Freeze代替它。它無憂無慮,像魅力一樣工作。 – AR06

+0

不知道那個。我會試一試,然後報告一次。 – KirkDCO

+0

我給了cx_Freeze一個嘗試,我更接近。爲了避免某些軟件包錯誤,我不得不拋出一些排除項。但是,現在,我遇到了字體問題。我正在使用的一個軟件包也使用Pillow和一些PIL字體。我已經找到了包裝的字體存儲位置,但不能完全知道它們在那裏。我直接將它們複製到build/exe目錄,但沒有運氣。我還看到cx_Freeze文檔中關於包含數據文件的部分,但我不知道如何使其工作。 – KirkDCO

回答

0

您是否檢查過:https://github.com/pyinstaller/pyinstaller/issues/1877(或其他問題)? https://github.com/pyinstaller/pyinstaller/wiki/If-Things-Go-Wrong

來自問題1877的引用「它看起來像hook-_tkinter.py不能處理自定義編譯的Tk。」 可能的解決方法:「謝謝,使用yum安裝後安裝了tkinter,tix,tcl-devel和tk-devel,現在工作正常。」

否則,Py2exe也是創建.exe文件的選項,用了很多次tkinter沒有問題。

+0

我還沒有看到。我沒有使用自定義生成,但我會嘗試安裝其他軟件包。我會試一試並在這裏回報 – KirkDCO

+0

不幸的是,我發現我已經安裝了所有這些軟件包。 – KirkDCO

+0

我也試過py2exe,發現我不得不添加一些DLL排除(numpy-atlas.dll和MSVCP90.dll)。一旦編譯,它會失敗,並有許多日誌條目說「ImportError:numpy.core.multiarray無法導入」我已經尋找解決方案,但沒有找到解決方案。 – KirkDCO

2

檢查https://github.com/pyinstaller/pyinstaller/issues/1584。 PIL掛鉤存在一個問題,它不包括tkinter模塊。

一個解決方案是通過從excludedimports中刪除 modname_tkinter來修改位於YourPythonFolder \ Lib \ site-packages \ PyInstaller \ hooks中的鉤子文件hook-PIL.py。

或者只是改變你的代碼中的導入語句的順序。做:

from PIL import ImageTk 
import Tkinter as tk 
+0

不錯的解決方案。請注意,改變導入順序不能使用'from Tkinter import *',但這可以像上面所做的那樣輕鬆解決。 – tfv