我有一个相当“繁重”的python程序,我想编译成exe.
该程序具有大量的导入,但是使用PyQT4框架,我在可见启动画面的同时加载了这些导入.
我使用pyinstaller(在cmd中)将此程序编译为单个.exe文件:
python %pycompile_file% --onefile --noconsole --icon=Icon.ico Script.pyw
但是,即使启动屏幕设置为在导入大量模块(特别是包括sympy)的同时显示,并且即使在通过python运行时可以立即显示并有足够的时间显示;
运行生成的.exe会导致在启动屏幕显示之前出现严重的延迟,该延迟仅在加载整个程序之前的很短时间内显示.
我的怀疑是,从.pyw到.exe的编译加快了实际的“代码”(因此,启动画面变短了),但是却减慢了程序执行的实际“开始”速度.
如何解决此问题,以使.exe不会“启动得太慢”?
(我怀疑编译为–onefile会很大,但是我需要将.exe文件作为所有.dll的一个文件夹,并且我不知道如何使pyinstaller这样做)
谢谢!
Windows 7的
python 2.7.2
py安装程序
PyQt4
解决方法:
Pyinstaller不会将python代码转换为本机代码,它只是将python字节码和字节码解释器打包到一个文件中-一旦启动开销消失,实际处理将以完全相同的速度进行.
Pyinstaller的–onefile模式将使您的应用启动缓慢,因为它必须先将所有库解压缩到一个临时目录中,然后才能加载它们.在PyQT的情况下,这些库很大,因此延迟会很明显.使用单目录模式,以便DLL不需要解压缩,应该更快.