加快编译的python程序?

时间:2012-02-07 09:48:55

标签: python qt compiler-construction pyqt pyinstaller

我有一个'重'的python程序,我想编译成一个exe。

该程序有相当数量的导入,但使用PyQT4框架,我加载这些导入,同时可以看到闪屏。
我使用pyinstaller(在cmd中)将此程序编译为单个.exe文件:

python %pycompile_file% --onefile --noconsole --icon=Icon.ico Script.pyw

然而,尽管在导入大量模块时(特别是包括同情心)将启动画面设置为显示,并且即使它立即显示并且在通过python运行时有足够的时间范围;
运行生成的.exe会在启动画面显示之前导致严重延迟,这只会在整个程序加载之前显示很短的时间。

我怀疑从.pyw到.exe的编译加快了实际的'代码'(因此为什么闪屏更短),但减慢了程序执行的实际“开始”。

如何解决这个问题,以便.exe不会“开始这么慢”?

(我怀疑编译--onefile贡献很大,但我需要.exe文件是所有.dll中的一个文件夹,我无法弄清楚如何让pyinstaller这样做)

谢谢!


Windows 7
python 2.7.2
pyinstaller
PyQt4的

2 个答案:

答案 0 :(得分:3)

Pyinstaller不会将python代码转换为本机代码,它只是将python字节码和字节码解释器打包到一个文件中 - 一旦启动开销不碍事,实际处理将以完全相同的速度发生。

Pyinstaller的--onefile模式会让你的应用程序启动速度变慢,因为它必须先将所有库解压缩到一个临时目录中,然后才能加载它们。在PyQT的情况下,这些库相当大,因此延迟将是显着的。使用单目录模式,以便DLL不需要解压缩,应该快得多。

答案 1 :(得分:0)

解决;

不要将.dll存档到已编译的.exe中 保持代码导入的所有文件(您希望用户与之交互,而无需浏览.dll)升级,并创建.exe的快捷方式,其中包含.exe的工作目录。

您可以使用pywin32创建这样的快捷方式。