使用 PyInstaller 将 Python 程序打包成无依赖的可执行文件
本文以 Windows 为例,其它系统上应该坑会更少一点。
安装
首先一点,截至目前(17 年 6 月),PyInstaller 还不兼容 Python 3.6,根据官方的说明,目前支持的版本是 2.7 和 3.3 到 3.5。当你看到这篇文章时,可能已经支持更新版本了,建议查看官方 repo 的 README:pyinstaller/pyinstaller。
用 pip 安装:
pip install pyinstaller
在 Windows 上,pip 会同时安装 pypiwin32 包,这是 PyInstaller 在 Windows 上的一个依赖。
这里就有了第一个坑,根据 Requirements:
It requires either the PyWin32 or pypiwin32 Python extension for Windows.
理论上应该默认情况下安装了 pypiwin32 就可以运行的,但其实并不行,直接用的话会报错 ImportError: DLL load failed: The specified module could not be found.
。
根据 #1840 这个 issue,再安装个 PyWin32 就可以了。
前往 Python for Windows Extensions,点进 pywin32
目录里面的最新 build,找到对应当前 Python 版本的 exe,下载安装。
使用
比如我们现在有一个脚本文件 main.py
,要将它打包成可执行文件,直接运行:
pyinstaller -F main.py
这将会在 main.py
所在目录下生成一些其它目录,最终的可执行文件就在 dist
目录中。这条命令中 -F
表示生成单个可执行文件,如果不加 -F
,则默认生成一个目录,其中除了可执行文件,还包括其它依赖文件。
总体来说用起来是非常简单的,不过在打包使用了 requests 包的程序时,出现了 ImportError: No module named 'queue'
的报错,发现 这里 也有遇到了同样的问题。
这个问题只需要在打包时加入 --hidden-import
参数即可:
pyinstaller -F --hidden-import queue main.py
更多用法请参考 Using PyInstaller。