Python將字庫(kù)文件打包成可執(zhí)行文件的常見(jiàn)方法
在 Python 打包時(shí),如果你想將字庫(kù)文件(如 .ttf、.otf 等字體文件)一起打包成一個(gè)可執(zhí)行文件,有幾種常見(jiàn)的方法,具體取決于你使用的打包工具。
使用 PyInstaller
PyInstaller 是最常用的打包工具之一,以下是包含字庫(kù)文件的方法:
基本方法 - 使用 --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
使用 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):
""" 獲取資源的絕對(duì)路徑 """
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 方法)
字體文件較大的話,打包后的文件體積會(huì)顯著增加
測(cè)試打包后的程序是否能正確加載字體
考慮字體文件的許可證問(wèn)題,確保你有權(quán)分發(fā)該字體
選擇哪種方法取決于你的具體需求和使用的打包工具。PyInstaller 通常是跨平臺(tái)打包的最佳選擇。
批量添加字體文件夾
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í)
- 檢查字體文件的許可證,確保可以合法分發(fā)
- 大量字體文件會(huì)顯著增加打包后的體積
- 測(cè)試打包后的程序能否正確找到并加載所有字體
- 考慮使用相對(duì)路徑而不是絕對(duì)路徑引用字體文件
選擇哪種方法取決于你的項(xiàng)目需求和使用的打包工具。對(duì)于大多數(shù)情況,PyInstaller 的 spec 文件方式提供了最好的靈活性和可維護(hù)性。
使用 spec 文件打包
pyinstaller your_script.spec
在代碼中訪問(wèn)打包后的字體文件
import os
import sys
from pathlib import Path
def resource_path(relative_path):
""" 獲取打包后資源的絕對(duì)路徑 """
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"無(wú)法加載字體文件: {font_path}")
font = ImageFont.load_default()到此這篇關(guān)于Python將字庫(kù)文件打包成可執(zhí)行文件的常見(jiàn)方法的文章就介紹到這了,更多相關(guān)Python打包字庫(kù)文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyqt5 lineEdit設(shè)置密碼隱藏,刪除lineEdit已輸入的內(nèi)容等屬性方法
今天小編就為大家分享一篇pyqt5 lineEdit設(shè)置密碼隱藏,刪除lineEdit已輸入的內(nèi)容等屬性方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python3實(shí)現(xiàn)取圖片中特定的像素替換指定的顏色示例
這篇文章主要介紹了Python3實(shí)現(xiàn)取圖片中特定的像素替換指定的顏色,涉及Python3針對(duì)圖片文件的讀取、轉(zhuǎn)換、生成等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
python fuzzywuzzy模塊模糊字符串匹配詳細(xì)用法
這篇文章主要介紹了使用Python完成公司名稱和地址的模糊匹配的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
利用python實(shí)現(xiàn)簡(jiǎn)單的循環(huán)購(gòu)物車功能示例代碼
購(gòu)物車對(duì)我們每位開(kāi)發(fā)者來(lái)說(shuō)應(yīng)該都不陌生,下面這篇文章主要給大家介紹了利用python實(shí)現(xiàn)簡(jiǎn)單的循環(huán)購(gòu)物車功能的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。2017-07-07
Python腳本實(shí)現(xiàn)監(jiān)聽(tīng)服務(wù)器的思路代碼詳解
這篇文章主要介紹了Python腳本實(shí)現(xiàn)監(jiān)聽(tīng)服務(wù)器的思路,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Pytorch卷積層手動(dòng)初始化權(quán)值的實(shí)例
今天小編就為大家分享一篇Pytorch卷積層手動(dòng)初始化權(quán)值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python通過(guò)urllib2獲取帶有中文參數(shù)url內(nèi)容的方法
這篇文章主要介紹了python通過(guò)urllib2獲取帶有中文參數(shù)url內(nèi)容的方法,涉及Python中文編碼的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Python進(jìn)行數(shù)據(jù)可視化Plotly與Dash的應(yīng)用小結(jié)
數(shù)據(jù)可視化是數(shù)據(jù)分析中至關(guān)重要的一環(huán),它能夠幫助我們更直觀地理解數(shù)據(jù)并發(fā)現(xiàn)隱藏的模式和趨勢(shì),本文主要介紹了Python進(jìn)行數(shù)據(jù)可視化Plotly與Dash的應(yīng)用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
Python中使用conda?install還是pip?install好
這篇文章主要給大家介紹了關(guān)于Python中使用conda?install還是pip?install好的相關(guān)資料,conda install 和 pip install 都是Python的包管理工具,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09

