1. 程式人生 > >Pyinstaller如何將資源文件一起打包至exe中

Pyinstaller如何將資源文件一起打包至exe中

sys 臨時 當前 簡單 .html 當前目錄 需要 內容 lose

基本原理:Pyinstaller 可以將資源文件一起bundle到exe中,當exe在運行時,會生成一個臨時文件夾,程序可通過sys._MEIPASS訪問臨時文件夾中的資源

官方說明:https://pythonhosted.org/PyInstaller/spec-files.html#spec-file-operation

測試案例功能描述,訪問資源文件夾res/a.txt,並打印其內容。實現方法如下:

源碼如下,比較簡單,resource_path方法說明了如何使用sys._MEIPASS變量來訪問臨時文件夾中的資源

#coding:utf-8
import sys
import os

#生成資源文件目錄訪問路徑
def resource_path(relative_path): if getattr(sys, frozen, False): #是否Bundle Resource base_path = sys._MEIPASS else: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) #訪問res文件夾下a.txt的內容 filename = resource_path(os.path.join("res","a.txt"))
print(filename) with open(filename) as f: lines = f.readlines() print(lines) f.close()

結下來介紹如何生成exe

首先需要生成spec文件,pyi-makespec -F test.py

技術分享圖片

編輯spec文件,在datas選項中說明需要將哪些文件加入exe,在零時文件夾中命名成什麽

以下圖為例,意思將test.py當前目錄下的res目錄(及其目錄中的文件)加入目標exe中,在運行時放在零時文件的根目錄下,名稱為res

技術分享圖片

生成EXE文件,pyinstaller -F test.spec

技術分享圖片

運行生成的EXE,可以看到資源生成的臨時文件夾路徑

技術分享圖片

Pyinstaller如何將資源文件一起打包至exe中