项目场景:
最近有个小需求,要求读取文件夹名字生成条形码,同时要做成可视化界面并打包成exe可执行文件
环境
anaconda(python3.8.8)
tkinter
pystrich
pyinstaller
问题描述
问题一
使用pyinstaller打包出来的程序过大
由于使用的是anaconda
环境,而pyinstaller
会把所有的依赖都打包进去,最后几百行的代码生成了2g多的巨无霸exe…
解决方法,另建一个环境,win+r —>cmd调出命令行窗口
conda create -n yourname(你的环境名) python=3.8.8(python版本自己指定) activate yourname pip installer xxx (安装你需要用到的库) ... pyinstaller -w -n yourname(你的exe名字) xxx.py(单个程序的名字)
这样子打包只会打包出你导入的库/包
问题二
使用打开exe发现报错
解决方法:
- 先检查是否已经导入了pywin32的包,可以在刚刚新建的环境中
pip list
就能看到所有已有的库/包- 巨坑的部分,本地没有相关的dll
- 进入本地的环境D:\Anaconda\envs\yourName\Lib\site-packages\pywin32_system32
,
- 将里面的pythoncomxx.dll
和pywintypesxx.dll
复制C:\Windows\System32
,重新打包即可
问题三
本地环境能生成并保存的条形码变成exe就不行了
出现这个问题的原因在于cannot find font file
,缺失了字库文件导致图像生成错误。
解决方法:打开
D:\Anaconda\envs\yourName\Lib\site-packages\PIL\ImageFont.py
搜索修改return load(os.path.join(directory, filename))
-->return load_default()
,然后重新打包即可恢复正常