pyinstaller打包程序exe踩过的坑
基础环境
- python2.7.17
- pyinstaller3.5
安装pyinstaller
pipinstallpyinstaller
坑,大坑,深坑
背景:用pygame写了个贪吃蛇游戏,要打包成exe
用到了字体文件C:\Windows\Fonts\simsun.ttc(宋体)
打包过程中没有报错
打包过程中的警告可以忽略,这个警告:WARNING:Hiddenimport“pygame._view”notfound!
运行exe的时候报NotImplementedError:Can'tperformthisoperationforunregisteredloadertype
真的是百思不得其姐,为什么会报这个错????
最终确定,是找不到引用的字体文件,需要指定下,添加如下代码:
defrp(relative_path): """Getabsolutepathtoresource,worksfordevandforPyInstaller""" try: #PyInstallercreatesatempfolderandstorespathin_MEIPASS base_path=sys._MEIPASS exceptException: base_path=os.path.abspath(".") returnos.path.join(base_path,relative_path)
并且每个文件都要使用该函数转换下地址
BASICFONT=pygame.font.Font(rp('C:\Windows\Fonts\simsun.ttc'),18) titleFont=pygame.font.Font(rp('C:\Windows\Fonts\simsun.ttc'),100) gameOverFont=pygame.font.Font(rp('freesansbold.ttf'),100)
再次pyinstaller-Fxxx.py生成单个exe后,就可以直接运行不会报错了
上边解决了可能是巧合,因为每个人电脑上都有这个字体
再来个图片的,其他电脑上就没有了
首先,还是那个函数需要加到代码里
defrp(relative_path): """Getabsolutepathtoresource,worksfordevandforPyInstaller""" try: #PyInstallercreatesatempfolderandstorespathin_MEIPASS base_path=sys._MEIPASS exceptException: base_path=os.path.abspath(".") returnos.path.join(base_path,relative_path)
再者,把src目录下的background.jpg用上方的函数转换下地址,同时打印下地址以观后效
bgimg=rp(os.path.join('src','background.jpg')) print(bgimg)
使用pyi-makespec-F2048.py命令生成spec文件,修改文件内容如下:
指定src目录打包到exe中,运行时生成的临时路径也叫src
指定命令打包:pyinstaller-F2048.spec
把2048.exe挪到另一个位置,跑一下看看cmd输出
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。