当前位置: 首页 > ai >正文

Python 打包时包含字库文件的方法

在 Python 打包时,如果你想将字库文件(如 .ttf、.otf 等字体文件)一起打包成一个可执行文件,有几种常见的方法,具体取决于你使用的打包工具。

使用 PyInstaller

PyInstaller 是最常用的打包工具之一,以下是包含字库文件的方法:

 1. 基本方法 - 使用 --add-data 参数:

pyinstaller --onefile --add-data="font.ttf;." your_script.py

多个:

pyinstaller --onefile --add-data="font1.ttf:." --add-data="font2.ttf:." --add-data="fonts/font3.otf:fonts/" your_script.py
  1. 使用 spec 文件(更推荐的方法):

    • 首先生成 spec 文件:pyi-makespec your_script.py

    • 然后修改 spec 文件,在 a.datas 中添加字体文件:

 

a = Analysis(['your_script.py'],binaries=[],datas=[('font.ttf', '.')],  # 添加这行...
)

添加多个文件

a = Analysis(['your_script.py'],binaries=[],datas=[('font1.ttf', '.'),('font2.ttf', '.'),('fonts/font3.otf', 'fonts'),  # 保持目录结构('fonts/font4.ttf', 'fonts'),],...
)

需要在代码中处理字体路径

import os
import sysdef 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")

注意事项

  1. 确保在代码中正确引用字体文件路径(使用上述的 resource_path 方法)

  2. 字体文件较大的话,打包后的文件体积会显著增加

  3. 测试打包后的程序是否能正确加载字体

  4. 考虑字体文件的许可证问题,确保你有权分发该字体

选择哪种方法取决于你的具体需求和使用的打包工具。PyInstaller 通常是跨平台打包的最佳选择。

批量添加字体文件夹

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],...
)

注意事项

  1. 保持文件目录结构一致,特别是在代码中引用字体时

  2. 检查字体文件的许可证,确保可以合法分发

  3. 大量字体文件会显著增加打包后的体积

  4. 测试打包后的程序能否正确找到并加载所有字体

  5. 考虑使用相对路径而不是绝对路径引用字体文件

选择哪种方法取决于你的项目需求和使用的打包工具。对于大多数情况,PyInstaller 的 spec 文件方式提供了最好的灵活性和可维护性。

4. 使用 spec 文件打包

pyinstaller your_script.spec

5.在代码中访问打包后的字体文件

import os
import sys
from pathlib import Pathdef 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()

http://www.xdnf.cn/news/4932.html

相关文章:

  • 浏览器自动化与网络爬虫实战:工具对比与选型指南
  • 基于springboot的海洋环保知识分享系统的设计与实现
  • 相机的方向和位置
  • 如何在 DataGridView 中加载大型数据集
  • 在一台CentOS服务器上开启多个MySQL服务
  • # 交换排序:从冒泡到快速排序的深度解析
  • WHAT - 简单服务发现
  • 【Bootstrap V4系列】学习入门教程之 组件-表单(Forms)
  • kuka, fanuc, abb机器人和移动相机的标定
  • 03 mysql 连接
  • 使用FastAPI微服务在AWS EKS中构建上下文增强型AI问答系统
  • Istio in action之Envoy Proxy详解
  • React 中二次封装组件时,实现 属性透传、事件透传、插槽透传和 ref 透传
  • iOS App 安全性探索:源码保护、混淆方案与逆向防护日常
  • 互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现
  • 4.1【LLaMA-Factory 实战】医疗领域大模型:从数据到部署的全流程实践
  • clahe算法基本实现
  • Linux 环境通过 tar 多线程压缩和解压
  • 护城河理论——AI与思维模型【100】
  • 5级李克特量表:量化态度的黄金标准
  • 生信服务器如何安装cellranger|生信服务器安装软件|单细胞测序软件安装
  • ndarray数组掩码操作,True和False获取数据
  • vue3: pdf.js5.2.133 using typescript
  • Windows 10 无法启动或黑屏的修复指南(适用于更新失败或磁盘故障)
  • javascript 补充的一些知识点
  • HarmonyOS学习——ArkTS与TS的关系
  • ArcScroll: 弧形滑动控件
  • 初等数论--欧拉函数积性的证明
  • Uniapp Android/IOS 获取手机通讯录
  • 【Linux】自定义shell的编写