Python3 已编译的应用程序使用 zip 减小大小?

Python3 compiled App Decrease Size with zip?

我成功编译了一个相当大的应用程序,但是应用程序的大小太大了(大约 1 GB)。我意识到几乎一半(400MB)来自两个模块(PyQt5 和 mpl_toolkits(basemap))。当然,一种方法是删除你不需要的辅助服务,但我不能这样做,因为我在我的应用程序中使用了所有这些。 然后我在考虑压缩这些模块,但我不知道这是否安全或执行时间是否可行。 那么有没有足够的方法来最小化我的应用程序的大小,如果 ZIP 是唯一的答案,那么在我的脚本中多次导入 PyQt5 这样的库上这样做是否可行?

完全可以做到这一点; Python 一直支持 "zipapps",从 3.5 开始,提供 a module, zipapp, to assist with creating them

唯一关心的是你的依赖项运行是否正确压缩;大多数都这样做,但有些采用压缩(和鸡蛋等)无法处理的文件系统层依赖性(这些文件的 setup.py 文件将声明 zip_safe=False 以告诉工具不允许它)。具有 C 扩展的包必须断言 zip_safe=True,如 the default analyzer assumes C extensions can't be safely zipped (though many can).

它会稍微减慢启动速度(因为它必须解压缩模块),但它不应该显着减慢 运行时间,无论您导入它多少次;第一次导入是唯一真正重要的导入,因为后续导入只是从内部缓存中提取模块的缓存副本 (sys.modules)。