python项目生成exe
前言
做了个python的小项目,需要打包为桌面端的exe使用,结果一打包,体积直接上百兆了,研究了下,使用虚拟环境打出的包会更干净小巧。
安装anaconda
anaconda用作python的虚拟环境管理工具,下载地址:https://repo.anaconda.com/archive/Anaconda3-2023.03-Windows-x86_64.exe
配置anaconda环境变量
win+i 搜索“高级系统设置”,打开
点击环境变量
双击系统变量中的Path
依次添加系统环境变量(需视anaconda安装目录而定):
D:\anaconda
D:\anaconda\Library\mingw-w64\bin
D:\anaconda\Library\usr\bin
D:\anaconda\Library\bin
D:\anaconda\Scripts依次返回确定保存
创建anaconda虚拟环境
创建anaconda虚拟环境:conda create -n env_1 python==3.7.9(可自行选择版本)
常用anaconda命令:
导出虚拟环境的列表:conda env list
导出当前环境的包:conda list
启动/切换至名为name的Python环境:conda activate name
退出虚拟环境:conda deactivate
删除虚拟环境:conda remove -n 环境名 –all在虚拟环境中安装python打包工具pyinstaller,以及其他自己在项目中使用到的包:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller(国内使用清华源较快)
vscode选择python解释器
打开vscode,按下ctrl+shift+p
设置vscode默认终端为cmd
生成spec文件
spec文件就是pyinstaller打包时的配置文件(语法为python语法),控制台输入命令:pyi-makespec -F -w main.py(main为生成的spec文件的文件名)
编辑spec文件
# -*- mode: python ; coding: utf-8 -*- def getExeName(): # 获取名字与版本 import config return config.name + '-' + config.version block_cipher = None a = Analysis( ['main.py'], # 需要打包的py文件 pathex=[], binaries=[], datas=[], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name=getExeName(), # 打包后的名字 debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, # 双击exe是否显示cmd窗口 disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon='./img/icon.ico' # 打包的exe图标 )
Analysis第一个参数为列表,列表中元素为需要打包的py文件,可自行添加删除,EXE为打包的exe信息,可在此处修改exe的名字、图标等。图标必须为ico格式图片,这里提供一个图片格式转换网站:https://onlineconvertfree.com/zh/convert/svg/ 。
利用spec配置打包
spec文件编辑完成后输入命令:Pyinstaller main.spec(main.spec为刚才生成的配置文件名)