Py2exe编译正常但生成的应用程序不工作
我正在使用 Python 2.7 来构建我的应用程序。在这个程序里,我用了几个包,分别是 numpy
、scipy
、csv
、sys
、xlwt
、time
、wxpython
和 operator
。
以上这些包都是 64 位的,而我在 Windows 7 专业版(64 位)上使用的是 Aptana Studio 3(64 位版本)的 Python 2.7(64 位版本)。
最后,我想用以下代码把我的项目编译成一个应用程序,文件名是 py2exeTest.py
:
from distutils.core import setup
import numpy # numpy is imported to deal with missing .dll file
import py2exe
setup(console=["Graphical_Interface.py"])
然后在 cmd
中,我切换到项目的目录,并用以下命令进行编译:
python py2exeTest.py py2exe
一切都很顺利,它在 dist
目录下生成了一个应用程序,名字是 Graphical_Interface.exe
。
我双击它,但出现了一个 cmd 窗口,还有一个 Python 输出窗口闪了一下,然后这两个窗口都消失了。我尝试以管理员身份运行这个应用程序,结果还是一样。
请问我该怎么解决这个问题?
谢谢!
编辑:
我成功捕捉到了闪烁在屏幕上的错误信息。错误信息是:
Traceback (most recent call last):
File "Graphical_Interface.py", line 397, in <module>
File "Graphical_Interface.py", line 136, in __init__
File "wx\_core.pyc", line 3369, in ConvertToBitmap
wx._core.PyAssertionError: C++ assertion "image.Ok()" failed at ..\..\src\msw\bitmap.cpp(802) in wxBitmap::CreateFromImage(): invalid image
我在项目中使用了一张 PNG 图片,代码如下:
self.workflow = wx.Image("Work Flow.png", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
wx.StaticBitmap(self.panel_settings, -1, self.workflow, (330,270), (self.workflow.GetWidth(), self.workflow.GetHeight()))
我尝试把上面的代码注释掉,应用程序就能正常工作了。但是,我需要在应用程序中显示这张图片。
请问我该怎么处理这个问题?
谢谢。
2 个回答
0
别担心,我有办法解决这个问题。
原来这个图片是在项目文件夹里,而不是在 dist
文件夹里。所以我有两个解决办法:
把图片复制到
dist
文件夹里。在代码里写上图片的完整路径。
谢谢你的帮助。
2
在编译图形应用程序时,你不能把它们做成控制台应用,因为有一些原因(老实说,我也说不清楚具体是什么),但你可以试试这个:
from distutils.core import setup
import numpy
import py2exe
import wxpython
setup(window=['Graphical_Interface.py'],
options={"py2exe" { 'boundle_files' : 1}})
另外,你也可以考虑换成:
这个工具支持Python3,并且可以在多个平台上使用。
一个cx_freeze脚本大概会长这样:
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
includefiles = ['/folder/image.png']
setup( name = "GUIprog",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options, 'include_files' : includefiles},
executables = [Executable("Graphical_Interface.py", base=base)])