【问题标题】:Frozen Python Application with cx_Freeze is very slow to start使用 cx_Freeze 冻结的 Python 应用程序启动速度很慢
【发布时间】:2014-01-15 14:21:08
【问题描述】:

我有一个相当复杂的 python 应用程序,它使用 numpy、pandas、PySide、pyqtgraph 和 matplotlib 以及其他包。当我在 Windows 上将应用程序与 cx_Freeze 捆绑在一起时,它的大小为 349MB。

我的问题是生成的可执行文件的启动时间很长,大约 15 秒。当我说启动时间时,我的意思是执行任何代码之前的时间量。我有一个简单的脚本,可以将“Hello”打印到控制台,即使这样也需要大约 15 秒才能运行。

有谁知道这个问题的解决方案,或者有什么方法可以调试它?是不是因为很多包里有很多.dll文件,所以速度慢?

编辑: 使用名为Process Montor 的出色工具,我将问题缩小到 pytz 模块。在一个特定的负载上,花费了 20 秒来查询 library.zip(cx_Freeze 将所有已编译的字节码放在其中)以获取 pytz zoneinfo!我最近添加了 pandas 作为依赖项,而 pandas 使用 pytz。

查看此图片以获取 Process Monitor 输出的示例:

【问题讨论】:

    标签: python windows dll cx-freeze


    【解决方案1】:

    我找到的解决方案是使用Process Monitor 来查看 cx_Freeze 是否在不合理的时间内加载模块。使用该工具,我还发现加载特定的 matplotlib 字体需要很长时间(可能需要 4 秒)。我删除了它,我的应用程序运行良好。

    【讨论】:

    • 知道它是哪种字体吗?
    • 对不起,我不记得了。我删除了 matplotlib 作为依赖项并切换到 pyqtgraph,所以它解决了我的问题。
    • 我对 pytz 也有同样的问题,解决方案是将它从 library.zip 中取出(使用排除选项)并将其直接放在 exe 旁边。这实现了十倍的加速。
    • 我遇到了与pytz 类似的问题。 pytz 使用pkg_resourcessetuptools 的一部分)访问zoneinfopkg_resources 的旧版本似乎与 library.zip 中的资源文件存在问题。升级到setuptools 的更新版本(在撰写本文时18.3.1)似乎已经解决了这个问题(并且大大减少了我的启动时间)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多