pyinstaller能够在Windows、Linux等操作系统下将Python脚本打包成可直接运行程序。使Python脚本可以在没有安装Python的环境中直接运行,方便共享。
注意事项:
- 待转换的.py文件绝对路径最好不要包含中文字符,容易出现一些莫名其妙的问题。
- python中需要有.py文件中用到的第三方库,否则在转换后的.exe文件中会出现不符合预期的结果。
pyinstaller基本语法
更多语法详情见Using PyInstaller
pyinstaller [options] script
options常用选项说明:
参数 |
|
---|---|
-F,-onefile | 表示生成单个可执行文件,常用。 |
-w, -windowed, -noconsole | 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧! |
-p | 表示你自己自定义需要加载的类路径,一般情况下用不到 |
-i | 表示可执行文件的图标。注意:图片后缀必须是.ico |
-c,console,-nowindowed | 使用控制台,无窗口(默认) |
-D,-onedir | 创建一个目录,包含EXE文件,但会依赖很多文件(默认选项) |
基本实例: pyinstaller -F myscript.py
使用实例
执行pyinstaller -F {Python脚本名} 完成文件转换。.exe文件生成的绝对路径会在倒数第二行显示,通常位于当前目录下dist所在目录下。转换后的.exe文件名与python文件名相同。
直接vscode终端里输入
pyinstaller -F call_login.py
一些问题:
Q1. 如果Python脚本使用到了第三方库,如何打包?
Solve_1: 将第三方库对应的包复制到待打包python脚本的同目录下,再执行打包命令。
Solve_2: pyinstaller.exe -F 路径/文件名.py 路径/文件名.py
Q2. 我的python脚本主要是命令行输出,但是程序执行完就退出无法查看相关信息,如何处理?
Solve: 在python脚本最后一行添加命令:system('pause')
或者 getchar()
(Linux中),目的在于暂停直至输入任意字符。
Q3. 我想给我的打包后的执行程序换个图标,如何处理?
Solve: 使用参数-i。如命令:pyinstaller -F -i tupian\qq.ico ccc.py。文件后缀名必须是.ico
Q4. 程序运行出现CMD窗口,如何去除?
Solve: 带上参数-w即可。pyinstaller -F call_login.py -w (-w表示去掉控制台窗口显示)
Q5. Qt工程打包时报错Exception: Qt plugin directory 'D:/Èí¼þ/python_3.7/lib/site-packages/PyQt5/Qt5/plugins' does not exist!
Solve:
- 修改环境变量;
- 在脚本中修改Qt_PLUGIN的路径信息,修改方式如下:(可通过报错的日志跳转,注意路径不要包含中文字符!)