Pyinstaller自动包含不需要的模块

时间:2016-04-17 16:08:29

标签: python python-3.x pyinstaller

我正在尝试使用我编写的一个非常简单的脚本创建.exe。该脚本仅包含glob和pandas。但是pyinstaller包括matplotlib,numpy,scipy,qt4,ipython以及其他一些东西。 .exe将无法运行,因为matplotlib存在错误,但我甚至不需要matplotlib。我错误的做法是让pyinstaller不能识别只需要glob和pandas吗?

我手动排除了scipy,matplotlib,PyQt4和iPython,而.exe仍然是160mb!

P.S。我在使用python 3.4的winpython中执行此操作。

编辑: 经过一些进一步的测试,我把它缩小到了熊猫。即使是只包含以下内容的脚本:

import pandas

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

EDIT2: 我试过制作一个包含以下内容的hook-pandas.py文件:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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