Py2exe con Tkinter
Domanda
Sto cercando di convertire un programma di base tkinter GUI a un exe utilizzando py2exe. Tuttavia ho incontrato un errore utilizzando il seguente script di conversione.
# C:\Python26\test_hello_con.py py2exe
from distutils.core import setup
import py2exe
setup(windows=[r'C:\Python26\py2exe_test_tk.py'])
C: \ Python26 \ py2exe_test_tk.py è il seguente codice
import Tkinter as tk
root = tk.Tk()
root.title("Test")
label1 = tk.Label(root,text="Hello!",font=('arial', 10, 'bold'), bg='lightblue')
label1.pack(ipadx=100, ipady=100)
root.mainloop()
Questo è l'errore che ottengo quando provo a fare funzionare la nuova creazione exe
Traceback (most recent call last):
File "py2exe_test_tk.py", line 4, in <module>
File "Tkinter.pyc", line 1643, in __init__
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
{C:/Users/My_Name/lib/tcl8.5} {C:/Users/My_Name/lib/tcl8.5} C:/Users/lib/tcl8.5 {C:/Users/My_Name/library} C:/Users/library C:/Users/tcl8.5.8/library C:/tcl8.5.8/library
This probably means that Tcl wasn't installed properly.
Sono abbastanza sicuro che sia qualcosa nella mia conversione i thats di script mi ??dà problemi. Che cosa ho tralascio? Oppure qualcuno ha un esempio di ciò che lo script di conversione sarà simile a un programma Tkinter GUI? Inoltre è possibile deviare l'uscita .exe file sul mio desktop?
Modifica
Il rapporto di errore, ha detto che mi mancava init.tcl {C: /Users/My_name/lib/tcl8.5} . Così ho fatto quella directory e mettere una copia di init.tcl lì. Ora, quando si tenta di eseguire il file exe si afferma che Msvcr90.dll che manca dal mio computer ed è necessaria per far funzionare il mio programma.
Anche questo è pitone 2.6.5 su Windows 7.
Soluzione
Per il vostro problema originale non posso dire che cosa esattamente è il problema, ma di solito si aiuta con tentativi ed errori di indovinare i file mancanti e directory. Se sai cosa ti perdi, aggiungerli al proprio packages
(per i moduli Python) o data_files
(per gli altri file).
Il secondo problema è il risultato di alcuni c-moduli (e pitone stessa) essendo compilazione con MS Visual Studio, avendo così una dipendenza alla 9.0 (2008) runtime MS Visual C ++. È possibile risolvere questo problema sia:
-
possedere una copia di Visual Studio (Express Edition non conta), in modo tale che si è permesso di ridistribuire le dipendenze MSVCR (a condizione che si proibite agli utenti reengeneering ecc delle parti dependend)
-
indicando gli utenti al download della MS pacchetto 2008 Redistributable a Microsoft Visual C ++.
Altri suggerimenti
Ho trovato un bug sul sito virutalenv che ha suggerito la seguente https://github.com/pypa/virtualenv/issues/93
per le finestre nella directory "C: \ Environments \ virtualenv \ Scripts \ activate.bat" basta aggiungere che sono impostati per la strada giusta per TCL e TK per la versione python
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
set "TK_LIBRARY=C:\Python27\tcl\tk8.5"
e riavviare il cmd o shell
Ha funzionato molto bene per me quando ho avuto questo errore.
py2exe non funziona con i moduli, ho sentito parlare di uno chiamato c_freeze che a quanto pare funziona con i moduli, provare questo? http://cx-freeze.sourceforge.net/
Per quanto riguarda Msvcr90.dll , vedi questo post quali pacchetti e forse meno preferibile che avere all'utente di installare separatamente.
Inoltre, la questione specifica in questo post è stata mia e io ancora non capisco causa principale. Detto questo, un pitone disinstallazione completa e pulita ricostruire funzionava benissimo ... forse questo è il vostro problema troppo. py2exe dà RuntimeError: Troppo presto per creare un'immagine