Python将字库文件打包成可执行文件的常见方法

 更新时间:2025年05月12日 11:02:53   作者:恋恋西风  
在 Python 打包时,如果你想将字库文件一起打包成一个可执行文件,有几种常见的方法,具体取决于你使用的打包工具,下面就跟随小编一起了解下具体的实现方法吧

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

使用 PyInstaller

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

基本方法 - 使用 --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

使用 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 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")

注意事项

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

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

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

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

选择哪种方法取决于你的具体需求和使用的打包工具。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],
    ...
)

注意事项

  • 保持文件目录结构一致,特别是在代码中引用字体时
  • 检查字体文件的许可证,确保可以合法分发
  • 大量字体文件会显著增加打包后的体积
  • 测试打包后的程序能否正确找到并加载所有字体
  • 考虑使用相对路径而不是绝对路径引用字体文件

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

使用 spec 文件打包

pyinstaller your_script.spec

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

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()

到此这篇关于Python将字库文件打包成可执行文件的常见方法的文章就介绍到这了,更多相关Python打包字库文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法

    pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法

    今天小编就为大家分享一篇pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python3实现取图片中特定的像素替换指定的颜色示例

    Python3实现取图片中特定的像素替换指定的颜色示例

    这篇文章主要介绍了Python3实现取图片中特定的像素替换指定的颜色,涉及Python3针对图片文件的读取、转换、生成等相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • python fuzzywuzzy模块模糊字符串匹配详细用法

    python fuzzywuzzy模块模糊字符串匹配详细用法

    这篇文章主要介绍了使用Python完成公司名称和地址的模糊匹配的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 利用python实现简单的循环购物车功能示例代码

    利用python实现简单的循环购物车功能示例代码

    购物车对我们每位开发者来说应该都不陌生,下面这篇文章主要给大家介绍了利用python实现简单的循环购物车功能的相关资料,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Python脚本实现监听服务器的思路代码详解

    Python脚本实现监听服务器的思路代码详解

    这篇文章主要介绍了Python脚本实现监听服务器的思路,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Pytorch卷积层手动初始化权值的实例

    Pytorch卷积层手动初始化权值的实例

    今天小编就为大家分享一篇Pytorch卷积层手动初始化权值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python通过urllib2获取带有中文参数url内容的方法

    python通过urllib2获取带有中文参数url内容的方法

    这篇文章主要介绍了python通过urllib2获取带有中文参数url内容的方法,涉及Python中文编码的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python进行数据可视化Plotly与Dash的应用小结

    Python进行数据可视化Plotly与Dash的应用小结

    数据可视化是数据分析中至关重要的一环,它能够帮助我们更直观地理解数据并发现隐藏的模式和趋势,本文主要介绍了Python进行数据可视化Plotly与Dash的应用小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Python中使用conda install还是pip install好

    Python中使用conda install还是pip install好

    这篇文章主要给大家介绍了关于Python中使用conda install还是pip install好的相关资料,conda install 和 pip install 都是Python的包管理工具,文中介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Python常见的pandas用法demo示例

    Python常见的pandas用法demo示例

    这篇文章主要介绍了Python常见的pandas用法,结合实例形式总结分析了Python使用pandas模块的常见操作技巧与相关注意事项,需要的朋友可以参考下
    2019-03-03

最新评论