python-3.x - PyInstaller 和 Nuitka 生成非常大的文件。如何减小尺寸?
问题描述
我在 Windows 上使用 Python 3.6 的 Anaconda 发行版,我希望将一个简单的 Python 脚本转换为一个独立的可执行文件。问题是生成的文件非常大(~900mb),而只使用了几个外部库。
更具体地说,我使用 PyQt5 和 pyqtgraph 以及一些集成的 python 库,例如 sys、time、os 和 math。到目前为止,我已经使用了 PyInstaller 和 Nuitka,但我似乎无法大幅减小可执行文件的大小。
我注意到存在一些占用大约 600mb 空间的 mkl 文件。删除这些文件后,我仍然能够运行我的程序,看起来很顺利。我还注意到有两个名为 libopenblas 的文件,它们似乎对程序的运行至关重要,总共有 100mb。
我已经研究过这个问题,我在 Stackoverflow 和其他网站上发现了类似的问题。人们声称他们能够使用 PyInstaller 生成小于 40mb 的 exe 文件。据说,为了实现这种尺寸减小,应该排除所有杂乱的库。但是,我不明白什么是“混乱”。例如,我尝试排除 numpy 并且程序没有运行,尽管事实上我没有在我的程序中直接使用它。显然,正在使用的库有一些依赖项,没有这些依赖项程序就无法运行。
最后,我找到了这个论坛,建议使用虚拟环境而不是 Anaconda。我尝试使用 venv 设置它,但我无法实现它,因为我的 Anaconda 安装会干扰它并且不允许我重新安装所有必要的库。
无论我做什么,我最终都会得到至少 200mb 的数据。如何获得大小小于 40mb 的功能可执行文件?如果像这样的简单程序产生如此大的文件,想象一下如果我决定集成其他库(如 tensorflow 或 scipy)最终会得到什么。这不是一个可行的解决方案,到目前为止我还没有找到解决它的方法。非常感谢任何帮助。
编辑:我尝试从其官方网站安装 Python,并从 Path 中删除了 Anaconda。我最终得到了一个稍小的文件,但它没有运行。
解决方案
我意识到这很旧,但我今天遇到了它并且遇到了同样的问题。
Pyinstaller hello world 程序将编译到大约 12 Mb。但是,一旦您开始做任何实质性的事情,就需要 numpy,这很大。
我有一个程序需要
paramiko
scp
它编译为 12 Mb。
我有另一个需要
numpy
tqdm
nomkl
matplotlib
它编译到 ~200 Mb(压缩到 ~75 Mb)。使用nomkl包可以让安装程序自动将 mkl 库排除在外。您必须删除 numpy,然后安装 nomkl 并重新安装 numpy。如果没有 nomkl,上述程序大约为 1 Gb。
如果您安装了 anaconda,我建议使用 conda 环境而不是虚拟环境。
推荐阅读
- java - 文本文件操作:从文本文件中获取数据并使用从原始文件中获取的数据写入一个新的文本文件
- javascript - 在点击之前触发“点击”
- javascript - 在屏幕阅读器可以使用 JavaScript 或 CSS 阅读之前删除网站上的内容...?
- spring - 用变量设置“style=width:”
- python - 格式化 Google 日历活动日期
- python - 我正在尝试使用 python 的 re 模块执行某些模式匹配
- jquery - TMDB API - 使用 jQuery 获取电影类型和图像
- c++ - CEPH + Librados++ 没有返回一致的结果
- javascript - React 中的状态未定义
- ms-access - 根据传递某个日期的另一个日期字段更新文本字段的值