我在使用gui2exe创建可执行文件时遇到问题
我决定试试gui2exe来制作我的可执行文件,但我怎么也搞不定,无论是用PyInstaller、Py2exe还是cxFreeze。它创建了一个无法启动的可执行文件(我运行它时,它开始加载,然后停止加载,什么都不发生,任务管理器里也没有它的进程)。
当gui2exe让我测试编译好的项目时,我点击“是”,结果出现了这个错误:“这个项目从未被编译过,或者它的可执行文件已被删除。”
通过批处理文件或命令行编译时,根本不会出现这种情况。
有没有什么帮助、指南、手册或文档可以用来学习gui2exe呢?
- 我在Windows 7 32位上运行
- 使用Python 2.7
- GUI2exe-0.5.1
- 我安装了pyinstaller-1.5.1、py2exe-0.6.9和cx_freeze-4.2.3
更新:
这是我正在使用的测试代码:
文件 Tk_tester.py(这是主要文件)
# -*- coding: mbcs -*-
from Tkinter import *
import ttk
from ScrolledWidgets import ScrolledText
root = Tk()
root.title('Gui2exe tester application')
txt = ScrolledText(root)
txt.pack(side='top', fill='both', expand=1)
txt.Text['font'] = ('Tahoma', 10)
b = ttk.Button(root, text='Quit', command=root.quit)
b.pack(side='bottom', anchor='e')
root.mainloop()
还有文件 ScrolledWidgets.py
# -*- coding: mbcs -*-
from Tkinter import *
import ttk
class ScrolledText(ttk.Frame):
def __init__(self, master, scrolls = 'v'):
ttk.Frame.__init__(self, master)
self['relief'] = 'sunken'
self['borderwidth'] = 1
self.rowconfigure(0, weight = 1)
self.columnconfigure(0, weight = 1)
self.__scroll = scrolls
self.Text = Text(self, relief = 'flat', borderwidth = 0)
self.Text.grid(column = 0, row = 0, sticky = 'news')
if self.__scroll == 'v':
yscroll = ttk.Scrollbar(self, orient = 'vertical')
yscroll.grid(column = 1, row = 0, sticky = 'ns')
self.Text['yscrollcommand'] = yscroll.set
yscroll['command'] = self.Text.yview
elif self.__scroll == 'h':
xscroll = ttk.Scrollbar(self, orient = 'horizontal')
xscroll.grid(column = 0, row = 1, sticky = 'ew')
self.Text['xscrollcommand'] = xscroll.set
xscroll['command'] = self.Text.xview
elif self.__scroll == 'both':
yscroll = ttk.Scrollbar(self, orient = 'vertical')
yscroll.grid(column = 1, row = 0, sticky = 'ns')
self.Text['yscrollcommand'] = yscroll.set
yscroll['command'] = self.Text.yview
xscroll = ttk.Scrollbar(self, orient = 'horizontal')
xscroll.grid(column = 0, row = 1, sticky = 'ew')
self.Text['xscrollcommand'] = xscroll.set
xscroll['command'] = self.Text.xview
这个编译得还不错。但是当我运行生成的exe时,出现了“ImportError: No module named carchive”的错误。
我试过一个只有控制台的应用程序——它运行得很好。
2 个回答
0
py2exe会努力找到所有需要的模块,但有时候它会失败,比如当一个程序动态生成模块路径并使用__import__
来加载它时。
在这种情况下,你需要手动修改你的setup.py
文件,添加缺失的模块。下面的代码可以解决“找不到名为_qt的模块”的问题:
import py2exe
from distutils.core import setup
setup(
windows=[{'script': 'test.py'}],
options={
'py2exe':
{
'includes': ['PyQt4._qt'],
}
}
)
1
我也遇到过同样的问题。一个简单的解决办法是在运行pyinstaller之前,手动把carchive的路径加到你的PYTHONPATH里。carchive.py
应该在你的pyinstaller文件夹里。对我来说,它在svn.pyinstaller.org\PyInstaller\loader
这个位置。