此篇文章只为学习交流,方便本人后续回顾查看,有需要的朋友可以参考以下步骤自行操作!
第一步:先梳理清楚自己需要运行的主代码里面import涉及到的相关.py文件或者模型文件的路径,确保自己知道自己引用了哪些py文件和哪些权重文件
比如我这边就使用了transformers,torch,torchcrf库,后面要记得安装上这些库!!!不然会导致代码生成exe文件后无法运行。
第二步:自己写的代码了解清楚之后,把引用的.py文件都合并在运行的主代码的.py文件中,这样可以避免打包多个.py文件造成的失败(就是复制粘贴到主代码里面,看看有没有重名的变量,换一个名字就可以。当然你也可以省略这一步,因为本人比较想避免不必要的麻烦,就干脆合并在一起了)
第三步:在主运行的.py文件中把使用到的模型文件路径设置为绝对路径,方便后续直接在目标服务器的相同位置导入相同的模型文件【这步也是怕后续把模型文件一起打包后生成的exe文件太大,一起打包的操作当然也是可以的,这边提供把权重文件和多个.py文件一起打包的代码(注意:该代码在第五步中使用!!!)】
pyinstaller --onefile --console --add-data "best_model.pth;." --add-data "models.py;." --add-data "utils.py;." "val test.py"
PS:修改文件主代码路径时,代码中要提供后续使用到的打包库的pyinstaller路径,以下为示例代码,可自行添加到主代码文件中(不懂没关系,复制粘贴,用到哪个路径改一下代码就可以直接使用!!!)
# 设定外部 BERT 和 CRF 模型路径
EXTERNAL_BERT_PATH = r"D:\chinese"
EXTERNAL_CRF_MODEL_PATH = r"D:\best_model.pth"
# 适配 PyInstaller 运行环境
if getattr(sys, 'frozen', False):
base_dir = sys._MEIPASS # PyInstaller 运行时的临时目录
else:
base_dir = os.path.dirname(os.path.abspath(__file__)) # 普通 Python 运行环境
# 设定模型路径
BERT_PATH = EXTERNAL_BERT_PATH if os.path.exists(EXTERNAL_BERT_PATH) else os.path.join(base_dir, 'chinese')
CRF_MODEL_PATH = EXTERNAL_CRF_MODEL_PATH if os.path.exists(EXTERNAL_CRF_MODEL_PATH) else os.path.join(base_dir, 'best_model.pth')
最重要的步骤来喽!!!
第四步:根据主代码的需要构建一个虚拟环境,防止在打包的时候一键打包了本地的所有环境,导致文件过大不可用
(为了详细指导操作,下面分为4小步,请务必一步一步谨慎运行,这是不报错的关键)
这里就以本人使用的anaconda环境为例说明!
1. anaconda进入命令窗口,创建一个新的虚拟环境命令:
virtualenv yye
(其中yye是自定义的虚拟环境的名称),可以先cd进入想要安装虚拟环境的路径,再执行创建命令,方便后续查看虚拟环境中有哪些库已经被安装,哪些库未被安装,还仍需要补充。
2. 下一步激活虚拟环境(刚刚在哪个地方创建的虚拟环境就要在哪个地方激活):
.\yye\Scripts\activate
激活后也可以根据相关需要cd进入指定路径。
3. 进入虚拟环境后,命令窗口的开头会显示(yye),说明进入成功。进入后,使用pip安装虚拟环境需要的库(第一步梳理出来的库你自行安装)以及pip安装需要的pyinstaller(负责打包的库,不要忘记,否则打包不了!!!)
4. 安装完成后,先不要急着退出命令窗口,可以pip list检查所需要的库是否全部安装完毕。虚拟环境下cd进入主代码所在的路径,先运行
python test.py
试一下能否正常运行!!!能正常运行说明库全部安装完毕,且代码正常。
第五步:执行打包命令
pyinstaller --onefile --icon="C:\Users\86189\Desktop\rm.ico" test.py
(要打包多个文件的朋友可以参考第三步中的代码,嘻嘻,我就是为了偷懒,没别的,报错太多,心好累!!!)
test.py为主程序的名称,打包后的exe名称同样也会为test.exe,执行文件的图标(就是你exe的标志!自行选择喜欢的图片就可以)只要是ico格式就行,指定好图标的路径就可以按照上面的代码开始打包。有很多可以线上图片转ico的网站,都是免费的,喜欢什么样的直接转就可以!为了防止图标尺寸等问题造成的无法正确生成图标,可以pip安装一个pillow库,这个库会自动帮你把.ico文件调成指定的大小,防止出错!
小tip:如果图标没有按照你选择的图片进行设置,可以尝试重命名exe文件,图标会再一次更新替换!(可能只是也许你的电脑一时间使用了之前的图标,别怪它……呜呜)
第六步:等待……直到你的代码提示你打包完成
第七步:冷静!!!不要着急点开exe执行文件,你的exe执行文件一般会储存在你刚刚运行打包路径的dist文件夹下面,但是你可以先cd在命令窗口进入你的dist文件(记得是虚拟环境中进入),然后输入python test.exe,先尝试能不能正常运行,如果直接双击打开exe文件可能看不到报错信息,命令窗口执行,报错信息一目了然!!!
报错问题:
1.跳过了第四步中先在虚拟环境中运行test.py主程序代码的步骤,直接着急忙慌的就开始打包,连代码都无法正常运行,你打包完成后怎么可能正常运行?(发出灵魂拷问!!!)先把自己的代码调试到正常状态。一般可能是虚拟环境中的库没安装完毕,或者有一些库不兼容等。
可以返回base环境中查看自己原本可以正常运行的代码使用的库是哪一个版本,在虚拟环境中安装相同版本的库试一下。
2.如果程序都可以正常运行,基本不会出现打包不了的情况,时间长短问题而已!
欢迎大家有问题一起提出来交流解决!!!
一路生花,ByteWhispers!