一、最粗略的打包方式
操作步骤
1、安装pip install pyinstaller(安装地址)
2、切换到需要打包的工程路径 cd D:\task\pyqt5
3、运行命令 pyinstaller -F main.py (xxx.py 打包的文件)
4、打包成功后项目新增dist文件,进入点击运行打包好的exe程序
注意事项:
Pyinstaller 常用的参数用法:
- –distpath
: 打包到哪个目录下
-w: 指定生成 GUI 软件,也就是运行时不打开控制台
-c: 运行时打开控制台
-i : 指定打包后可执行文件的图标
–clean: 在构建之前清理PyInstaller缓存并删除临时文件 关于打包成什么样,有两种选择:
-D: 创建包含可执行文件的单文件夹包,同时会有一大堆依赖的 dll 文件,这是默认选项
-F: 只生成.exe 文件,位于项目dist文件夹下
补充细节-更换图标
推荐一个图标获取地址,里面ico蛮多的:easyicon
下载了自己心仪的ico后,用-i+ico路径来替换默认ico,以管理员的身份运行重新生成exe工具,
命令为pyinstaller -i ico路径 -w xxxx.py
二、需要进行参数传递的exe
情况举例
林某利用pyqt写了一个对图片进行情感标注的图形化界面GUI,但是需要标注的图片数量过大,只能分时段多次标注,但每一次标注人员完成的数量是随机的,在下一次标注时,给定的新索引应该为上一次标注结束索引+1。所以需要将索引值传递给exe文件对应的py文件,实现动态跟随。
解决方案
1、main.py文件中应该出现下列代码:
self.index = int(sys.argv[1])
2、打开命令提示符窗口cmd,先切换到main.exe所在路径,比如cd D:task\1\,再输入命令main.exe 0 #0代表从第一张图片开始进行情感标注
3、在下一次需要传递参数时,重复2的操作,再输入命令
main.exe 456 #456代表从第456张图片开始标注
细节详解
为什么是argv[1]?
sys.argv变量是一个包含了命令行参数的字符串列表,即使用命令行传递给程序的参数。例子:cmd执行 python using_sys.py we are arguments
输出结果如下:
#encoding=utf-8
import sys
a=sys.argv[0]
b=sys.argv[1]
c=sys.argv[2]
c=sys.argv[3]
print("filename:",a)
print("param1:",b)
print("param2:",c)
print("param3:",d)
输出:
('filename:', 'using_sys.py')
('param1:', 'we')
('param2:', 'are')
('param3:', 'arguments')
其中,sys.argv[0]默认表示代码本身文件路径,所以手动传递的参数需要从sys.argv[1]开始
三、打包生成的exe文件过大
1、尽量用from…import…
在代码里面尽量不要用import,能from…import…就尽量用这个,因为如果是import的话,在打包的时候,会将整个包都打包到exe里面,没有意义的增大了exe工具的大小