2010-10-19 7 views
4

Я пытаюсь преобразовать базовую программу GUI tkinter в .exe с помощью py2exe. Однако я столкнулся с ошибкой, используя следующий скрипт преобразования.Py2exe с Tkinter

# 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 является следующий код

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() 

Это ошибка, я получаю, когда я пытаюсь запустить вновь созданный 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. 

I Я уверен, что это что-то в моем сценарии конверсии, что дает мне проблемы. Что я пропустил? Или у кого-то есть пример того, как будет выглядеть сценарий конверсии для GUI-программы tkinter? Также возможно ли переместить выходные .exe-файлы на мой рабочий стол?

EDIT:

Сообщение об ошибке говорит, что мне не хватает init.tcl из {C: /Users/My_name/lib/tcl8.5}. Поэтому я сделал этот каталог и поместил копию init.tcl. Теперь, когда я пытаюсь запустить .exe, он заявляет, что MSVCR90.dll отсутствует на моем компьютере и необходим для запуска моей программы.

Кроме того, это питон 2.6.5 на Windows, 7.

+2

Я столкнулся с аналогичными проблемами как с py2exe для Python 2.6.4, так и cx_Freeze для Python 3.1.2 на Win7 64-бит. Я обнаружил, что подкаталоги tcl (tcl8.5 и tk8.5) не включаются в сгенерированный каталог dist. Я скопировал два каталога из моего Python26 \ tcl в dist \ tcl8.6 и dist \ tk8.5 соответственно, а двоичный файл с py2exe прекратил жаловаться на отсутствие tcl.I в конечном итоге переустановил py2exe, и проблема исчезла. Теперь, после установки смолы py2exe, теперь tcl-каталоги находятся под dist \ tcl \ tcl8.5 и dist \ tcl \ tk8.5. – JTP

ответ

2

Для исходной задачи я не могу сказать, что именно проблема, но, как правило, это помогает с методом проб и ошибок, чтобы угадать недостающие файлы и справочники. Если вы знаете, что вам не хватает, добавьте их в свой packages (для модулей python) или data_files (для других файлов).

Вторая проблема связана с тем, что некоторые c-модули (и сам python) строятся с помощью MS Visual Studio, тем самым имея зависимость от среды выполнения Visual C++ 9.0 (2008). Вы можете решить эту проблему, либо:

  • владеющего экземпляр Visual Studio (Express Edition не считается), так что вы имеете право распространять зависимости MSVCR (при условии, что вы запрещаете пользователь reengeneering и т.д. . зависимых частей)

  • , указывая пользователям на загрузку пакета MS Visual C++ 2008 Redistributable в Microsoft.

1

Я нашел ошибку на сайте virutalenv, который предложил следующую https://github.com/pypa/virtualenv/issues/93

для окон в вашей директории «C: \ Environments \ VirtualEnv \ Scripts \ активировать.Летучая мышь» просто добавить, которые установлены на правильном пути к TCL и ТЗ для питона версии

set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" 
set "TK_LIBRARY=C:\Python27\tcl\tk8.5" 

и перезапустить ЦМД или оболочки

Он работал очень хорошо для меня, когда у меня была эта ошибка.

0

Что касается msvcr90.dll, увидеть этот пост, который упаковывает его и, может быть менее предпочтительным, чем с пользователем установить его отдельно.

Кроме того, конкретный вопрос в этой должности был моим, и я до сих пор не понимаю первопричины. Тем не менее, полный удаленный питон и чистая перестройка отлично работали ... может быть, это и ваша проблема. py2exe gives RuntimeError: Too early to create image

Смежные вопросы