【问题标题】:Pyinstaller automatically includes unneeded modulesPyinstaller 自动包含不需要的模块
【发布时间】:2016-08-09 07:13:33
【问题描述】:

我正在尝试从我编写的一个非常简单的脚本创建一个 .exe。该脚本仅包括 glob 和 pandas。但是 pyinstaller 包括 matplotlib、numpy、scipy、qt4、ipython 和一堆其他东西。 .exe 不会运行,因为 matplotlib 存在错误,但我什至不需要 matplotlib。我做错了什么让 pyinstaller 无法识别只需要 glob 和 pandas?

我已经手动排除了 scipy、matplotlib、PyQt4 和 iPython 并且 .exe 仍然是 160mb!

附:我正在使用 python 3.4 在 winpython 中执行此操作。

编辑: 通过进一步的测试,我将其范围缩小到 Pandas。即使是只包含以下内容的脚本:

import pandas

将创建一个 460MB 的 dist 文件夹或一个 182MB 的 .exe 文件。我可以找出正在导入哪些模块以便正确排除所有模块的最简单方法是什么?

编辑2: 我尝试制作一个 hook-pandas.py 文件,其中包含:

excludedhooks=['scipy','matplotlib','PIL','cython','PyQt4','zmq']

控制台输出表明,由于挂钩文件,导入正在被删除,但来自这些模块的大量文件仍最终位于 dist 文件夹中。

我也尝试在 .spec 文件以及控制台中使用 --exclude-module 排除这些模块,但这些模块中的文件仍然显示。

【问题讨论】:

  • 所以我需要手动排除所有我不需要的东西?为什么它会假设我包含了所有这些模块?
  • 好吧我不知道,但我猜答案写在 PyInstaller 的官方手册中。
  • 其中一些东西绝对是必要的。 Pandas 是基于 NumPy 构建的,因此您肯定需要 NumPy。
  • 猜想,但您的应用文件夹中没有一些不必要的大文件(例如二进制文件)吗? PyInstaller 也可以将它们放入包中。包含在控制台输出 afaik 中。

标签: python python-3.x pyinstaller


【解决方案1】:

Pyinstaller 可能已经从您当前的依赖项中找出了这些依赖项。如果您确定,请使用--exclude-module 标志列出您要排除的所有模块。

http://pythonhosted.org/PyInstaller/#general-options

【讨论】:

    【解决方案2】:

    不确定这是否真的算作一个解决方案。但是通过完全忽略winpython并使用标准安装的python,它只添加了pyinstaller和pandas的pip安装,我很容易生成一个18MB的功能性.exe。我想这与winpython有关。

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      相关资源
      最近更新 更多