之前在公司有开发过几款小工具给小伙伴使用,考虑到其他同事电脑上不一定安装了python环境,就将脚本代码打包成exe可执行文件,用户只需要双击即可打开使用工具,无需额外安装各种依赖,十分方便友好。
图1-1
现将打包方法介绍如下:
1.安装pyinstaller库: pip install pyinstaller
2.进入到脚本程序所在目录,执行打包命令:pyinstaller -F -w find_pcf_file.py
(find_pcf_file.p为程序脚本名称)
图2-1
3.等待打包完成
图3-1
4.进入到脚本同级目录下的dist目录,找到打包后的exe文件即可
图4-1
备注:如果脚本只是单纯的后台程序,无需交互,则不会有图1-1显示的可视化界面,如需要进行交互,可参考如下代码:
if__name__=="__main__":
root=Tk()
var_date=StringVar()
var_path=StringVar()
root.title('PCF文件自动采集工具V1.0')
sw=root.winfo_screenwidth()
sh=root.winfo_screenheight()
ww=710
wh=430
x=(sw-ww)/2
y=(sh-wh)/2
root.geometry("%dx%d+%d+%d"%(ww,wh,x,y))
Label(root,text=r"使用说明:").grid(row=1,column=0,sticky=W,columnspan=1)
Label(root,text=r"1.输入日期范围,格式:yyyymmdd,yyyymmdd").grid(row=2,column=0,sticky=W,columnspan=1)
Label(root,text=r"2.点击采集文件按钮").grid(row=3,column=0,sticky=W,columnspan=1)
Label(root,text=r"3.有任何建议及问题请联系:段小王 爷").grid(row=4,column=0,sticky=W,columnspan=1)
Label(root,text=r"输入需要采集的日期范围:").grid(row=5,column=0,sticky=W,columnspan=1)
Label(root,text=r"文件存放路径:").grid(row=6,column=0,sticky=W,columnspan=1)
#输入日期范围
enter_date=Entry(root,show=None,textvariable=var_date,font=('Arial',9))
enter_date.grid(row=5,column=1,columnspan=2)
#enter_date.place(width=350)
#输入选择文件路径
enter_path=Entry(root,show=None,textvariable=var_path,font=('Arial',9))
enter_path.grid(row=6,column=2,columnspan=4)
#收集文件按钮
btn_change=Button(root,text='收集文件',bg="Gray",command=copy_file) # copy_file方法是需求的具体实现方法
btn_change.grid(row=7,column=2)
root.mainloop()
补充:
在使用pyinstaller对python程序进行打包后,若打包的主程序中调用自编模块(有时第三方模块也会出现同样问题),运行exe文件出现模块找不到的问题 打开exe文件后输出以下报错: ModuleNotFoundError: No module named ‘xxxxxxx’
解决方案: pyinstaller -F 测试.py -p .\venv\Lib\site-packages
-
脚本引用的模块存放在工程下的\venv\Lib\site-packages目录
-
-F:直接生成单独的exe文件,不附带各种依赖文件。
-
-p:后面紧跟着你要指定的模块搜索路径,如果你的模块安装的路径没有被PyInstaller自动检索到,自己指定即可。
重新生成exe文件后,运行即可,问题解决!