溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pyinstaller打包程序exe踩過的坑

發(fā)布時間:2020-10-22 20:59:18 來源:腳本之家 閱讀:291 作者:peace老師 欄目:開發(fā)技術

基礎環(huán)境

  • python 2.7.17
  • pyinstaller 3.5

安裝pyinstaller

pip install pyinstaller

坑,大坑,深坑

背景:用pygame寫了個貪吃蛇游戲,要打包成exe
用到了字體文件 C:\Windows\Fonts\simsun.ttc (宋體)

打包過程中沒有報錯
打包過程中的警告可以忽略,這個警告: WARNING: Hidden import “pygame._view” not found!

運行exe的時候報NotImplementedError: Can't perform this operation for unregistered loader type
真的是百思不得其姐,為什么會報這個錯????
最終確定,是找不到引用的字體文件,需要指定下,添加如下代碼:

def rp(relative_path):
 """ Get absolute path to resource, works for dev and for PyInstaller """
 try:
  # PyInstaller creates a temp folder and stores path in _MEIPASS
  base_path = sys._MEIPASS
 except Exception:
  base_path = os.path.abspath(".")

 return os.path.join(base_path, relative_path)

并且每個文件都要使用該函數(shù)轉(zhuǎn)換下地址

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 -F xxx.py生成單個exe后,就可以直接運行不會報錯了

上邊解決了可能是巧合,因為每個人電腦上都有這個字體

再來個圖片的,其他電腦上就沒有了
首先,還是那個函數(shù)需要加到代碼里

def rp(relative_path):
 """ Get absolute path to resource, works for dev and for PyInstaller """
 try:
  # PyInstaller creates a temp folder and stores path in _MEIPASS
  base_path = sys._MEIPASS
 except Exception:
  base_path = os.path.abspath(".")

 return os.path.join(base_path, relative_path)

再者,把src目錄下的background.jpg用上方的函數(shù)轉(zhuǎn)換下地址,同時打印下地址以觀后效

bgimg = rp(os.path.join('src','background.jpg'))
print(bgimg)

使用 pyi-makespec -F 2048.py命令生成spec文件,修改文件內(nèi)容如下:

指定src目錄打包到exe中,運行時生成的臨時路徑也叫src

pyinstaller打包程序exe踩過的坑

指定命令打包:pyinstaller -F 2048.spec

把2048.exe挪到另一個位置,跑一下看看cmd輸出

pyinstaller打包程序exe踩過的坑

生成的臨時路徑也叫src,且能找到我們的圖片。

這時候還是不確定,我們換臺機器跑下試試

pyinstaller打包程序exe踩過的坑

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI