打包命令
打包 Python 文件
输入如下格式的命令即可
默认命令
Pyinstaller 文件名.py
Pyinstaller -option1 -option2 -... 要打包的文件
Pyinstaller 文件名.pyPyinstaller -option1 -option2 -... 要打包的文件
参数选项比较多,这里我列一个表:
参数选项 | 描述 |
-F, -onefile | 只生成一个单个文件(只有一个 exe 文件) |
-D, -onedir | 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,这样代码易于维护 |
-K, –tk | 在部署时包含 TCL/TK |
-a, -ascii | 不包含编码 在支持 Unicode 的 Python 版本上默认包含所有的编码 |
-d, -debug | 产生 debug 版本的可执行文件 |
-w, -windowed, -noconsole | 使用 Windows 子系统执行 当程序启动的时候不会打开命令行(只对 Windows 有效) |
-c, -nowindowed, -console | 使用控制台子系统执行(默认)(只对 Windows 有效) pyinstaller -c xxxx.py pyinstaller xxxx.py --console |
-s, -strip | 可执行文件和共享库将 run through strip 注意 Cygwin 的 strip 往往使普通的 win32 Dll 无法使用 |
-X, -upx | 如果有 UPX 安装(执行 Configure.py 时检测),会压缩执行文件( Windows 系统中的 DLL 也会) |
-o DIR, -out=DIR | 指定 spec 文件的生成目录,如果没有指定,而且当前目录是 PyInstaller 的根目录,会自动创建一个用于输出( spec 和生成的可执行文件)的目录 如果没有指定,而当前目录不是 Pyinstaller 的根目录,则会输出到当前的目录下 |
-p DIR, -path=DIR | 设置导入路径(和使用 PYTHONPATH 效果相似) 可以用路径分割符( Windows 使用分号,Linux 使用冒号)分割,指定多个目录 也可以使用多个 -p 参数来设置多个导入路径,让 pyinstaller 自己去找程序需要的资源 |
-i -icon=<FILE.ICO> | 将 file.ico 添加为可执行文件的资源(只对 Windows 系统有效),改变程序的图标 |
-i -icon=<FILE.EXE,N> | 将 file.exe 的第 n 个图标添加为可执行文件的资源(只对 Windows 系统有效) |
-v FILE, -version=FILE | 将 verfile 作为可执行文件的版本资源(只对 Windows 系统有效) |
-n NAME, -name=NAME | 可选的项目(产生的 spec 的)名字 如果省略,第一个脚本的主文件名将作为 spec 的名字 |
打完包之后可能出现错误
报错信息:
=============================================================
A RecursionError (maximum recursion depth exceeded) occurred.
For working around please follow these instructions
=============================================================
1. In your program's .spec file add this line near the top::
import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)
2. Build your program by running PyInstaller with the .spec file as
argument::
pyinstaller myprog.spec
3. If this fails, you most probably hit an endless recursion in
PyInstaller. Please try to track this down has far as possible,
create a minimal example so we can reproduce and open an issue at
https://github.com/pyinstaller/pyinstaller/issues following the
instructions in the issue template. Many thanks.
Explanation: Python's stack-limit is a safety-belt against endless recursion,
eating up memory. PyInstaller imports modules recursively. If the structure
how modules are imported within your program is awkward, this leads to the
nesting being too deep and hitting Python's stack-limit.
With the default recursion limit (1000), the recursion error occurs at about
115 nested imported, with limit 2000 at about 240, with limit 5000 at about
660.
————————————————
你打包目录下会生成如下文件
打开你的main.spec文件
在顶端添加代码:
import sys
sys.setrecursionlimit(sys.getrecursionlimit() * 5)
import syssys.setrecursionlimit(sys.getrecursionlimit() * 5)
然后在运行命令(对应的文件名)
pyinstaller 你的文件名.spec
pyinstaller 你的文件名.spec
然后就完成了
打完包之的运行闪退问题:
先安装一个新的第三方库ordereddict
安装命令:
pip install ordereddict
pip install ordereddict
注意自己python代码的文件引入路径(确保对应的路径下有对应的文件,我这里设置的是根目录下)
重新打包
pyinstaller 你的文件名.spec
pyinstaller 你的文件名.spec
完成之后
打开对应的文件夹双击就可以了(这里以我的项目为例)