Python打包時(shí)包含字庫文件的幾種常見方法
前言
在 Python 打包時(shí),如果你想將字庫文件(如 .ttf、.otf 等字體文件)一起打包成一個(gè)可執(zhí)行文件,有幾種常見的方法,具體取決于你使用的打包工具。
使用 PyInstaller
PyInstaller 是最常用的打包工具之一,以下是包含字庫文件的方法:
1. 基本方法 - 使用 --add-data 參數(shù):
pyinstaller --onefile --add-data="font.ttf;." your_script.py
多個(gè):
pyinstaller --onefile --add-data="font1.ttf:." --add-data="font2.ttf:." --add-data="fonts/font3.otf:fonts/" your_script.py
2. 使用 spec 文件(更推薦的方法):
首先生成 spec 文件:
pyi-makespec your_script.py然后修改 spec 文件,在
a.datas中添加字體文件:
a = Analysis(
['your_script.py'],
binaries=[],
datas=[('font.ttf', '.')], # 添加這行
...
)添加多個(gè)文件
a = Analysis(
['your_script.py'],
binaries=[],
datas=[
('font1.ttf', '.'),
('font2.ttf', '.'),
('fonts/font3.otf', 'fonts'), # 保持目錄結(jié)構(gòu)
('fonts/font4.ttf', 'fonts'),
],
...
)需要在代碼中處理字體路徑:
import os
import sys
def resource_path(relative_path):
""" 獲取資源的絕對路徑 """
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
# 使用示例
font_path = resource_path("font.ttf")注意事項(xiàng)
確保在代碼中正確引用字體文件路徑(使用上述的
resource_path方法)字體文件較大的話,打包后的文件體積會顯著增加
測試打包后的程序是否能正確加載字體
考慮字體文件的許可證問題,確保你有權(quán)分發(fā)該字體
選擇哪種方法取決于你的具體需求和使用的打包工具。PyInstaller 通常是跨平臺打包的最佳選擇。
3. 批量添加字體文件夾
import glob
# 獲取所有字體文件
font_files = glob.glob('fonts/*.ttf') + glob.glob('fonts/*.otf')
a = Analysis(
['your_script.py'],
binaries=[],
datas=[(font, 'fonts') for font in font_files],
...
)注意事項(xiàng)
保持文件目錄結(jié)構(gòu)一致,特別是在代碼中引用字體時(shí)
檢查字體文件的許可證,確??梢院戏ǚ职l(fā)
大量字體文件會顯著增加打包后的體積
測試打包后的程序能否正確找到并加載所有字體
考慮使用相對路徑而不是絕對路徑引用字體文件
選擇哪種方法取決于你的項(xiàng)目需求和使用的打包工具。對于大多數(shù)情況,PyInstaller 的 spec 文件方式提供了最好的靈活性和可維護(hù)性。
4. 使用 spec 文件打包
pyinstaller your_script.spec
5.在代碼中訪問打包后的字體文件
import os
import sys
from pathlib import Path
def resource_path(relative_path):
""" 獲取打包后資源的絕對路徑 """
if hasattr(sys, '_MEIPASS'):
base_path = Path(sys._MEIPASS)
else:
base_path = Path.cwd()
return str(base_path / relative_path)
# 使用示例
font_path = resource_path('fonts/NotoSans-Regular.ttf')
# 使用字體(以Pillow為例)
from PIL import ImageFont
try:
font = ImageFont.truetype(font_path, size=12)
except IOError:
print(f"無法加載字體文件: {font_path}")
font = ImageFont.load_default()總結(jié)
到此這篇關(guān)于Python打包時(shí)包含字庫文件的幾種常見方法的文章就介紹到這了,更多相關(guān)Python打包包含字庫文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何實(shí)現(xiàn)python爬蟲爬取視頻時(shí)實(shí)現(xiàn)實(shí)時(shí)進(jìn)度條顯示
這篇文章主要介紹了如何實(shí)現(xiàn)python爬蟲爬取視頻時(shí)實(shí)現(xiàn)實(shí)時(shí)進(jìn)度條顯示,在爬取并下載網(wǎng)頁上的視頻的時(shí)候,我們需要實(shí)時(shí)進(jìn)度條,這可以幫助我們更直觀的看到視頻的下載進(jìn)度。文章圍繞主題展開更多內(nèi)容,需要的小伙伴可以參考一下2022-06-06
學(xué)習(xí)python之編寫簡單乘法口訣表實(shí)現(xiàn)代碼
這篇文章主要介紹了學(xué)習(xí)python之編寫簡單乘法口訣表實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-02-02
python 通過可變參數(shù)計(jì)算n個(gè)數(shù)的乘積方法
今天小編就為大家分享一篇python 通過可變參數(shù)計(jì)算n個(gè)數(shù)的乘積方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
解決keras,val_categorical_accuracy:,0.0000e+00問題
這篇文章主要介紹了解決keras,val_categorical_accuracy:,0.0000e+00問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Python利用wxPython模塊打造ChatGPT式打字效果程序
這篇文章主要為大家介紹了如何利用Python和wxPython模塊打造一個(gè)ChatGPT式打字效果程序,從而增強(qiáng)用戶體驗(yàn)或提高應(yīng)用程序的可讀性,感興趣的可以了解一下2023-05-05
Flask框架實(shí)現(xiàn)的前端RSA加密與后端Python解密功能詳解
這篇文章主要介紹了Flask框架實(shí)現(xiàn)的前端RSA加密與后端Python解密功能,結(jié)合實(shí)例形式詳細(xì)分析了flask框架前端使用jsencrypt.js加密與后端Python解密相關(guān)操作技巧,需要的朋友可以參考下2019-08-08

