You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包含pyfiglet字体的Python程序时字体缺失问题求助

解决PyInstaller打包pyfiglet字体缺失问题的方案

核心问题

PyInstaller默认不会自动打包pyfiglet的字体资源文件(.flf格式),这些文件不属于Python模块,因此打包后程序无法找到字体文件,导致FontNotFound或ModuleNotFoundError: pyfiglet.fonts错误。以下是几种可靠的解决方法:


方法1:直接用PyInstaller的--add-data参数打包字体目录

  1. 找到pyfiglet字体路径:

    • 系统Python环境:路径通常为C:\Python311\Lib\site-packages\pyfiglet\fonts
    • PyCharm虚拟环境:路径为项目目录\venv\Lib\site-packages\pyfiglet\fonts
  2. 执行打包命令:

    pyinstaller --onefile --add-data "C:\Python311\Lib\site-packages\pyfiglet\fonts;pyfiglet/fonts" 你的脚本名.py
    
    • --onefile:生成单个独立exe文件
    • --add-data:将本地字体目录复制到打包后exe内部的pyfiglet/fonts路径(Windows下用分号分隔源路径和目标路径)

方法2:修改spec文件打包

  1. 生成spec文件:

    pyi-makespec 你的脚本名.py
    
  2. 编辑生成的.spec文件:
    在Analysis部分的datas列表中添加字体目录的映射:

    a = Analysis(
        ['你的脚本名.py'],
        pathex=[],
        binaries=[],
        datas=[('C:\\Python311\\Lib\\site-packages\\pyfiglet\\fonts', 'pyfiglet/fonts')],
        ... # 其他默认内容保留
    )
    
  3. 用spec文件打包:

    pyinstaller 你的脚本名.spec
    

方法3:仅打包所需字体(减小exe体积)

如果只用到少数字体,无需打包整个字体目录:

  1. 将需要的字体文件(如banner3-d.flf)复制到项目下的fonts文件夹
  2. 修改代码指定字体路径:
    from pyfiglet import Figlet
    figlet = Figlet(font='./fonts/banner3-d.flf')
    
  3. 执行打包命令:
    pyinstaller --onefile --add-data "fonts/banner3-d.flf;fonts" 你的脚本名.py
    

方法4:适配打包后的运行路径

PyInstaller会在运行时将exe解压到临时目录,可通过sys._MEIPASS获取该路径,确保代码能正确找到字体:

import sys
import os
from pyfiglet import Figlet

def get_font_path(font_name):
    if hasattr(sys, '_MEIPASS'):
        # 打包后运行时的字体路径
        return os.path.join(sys._MEIPASS, 'pyfiglet', 'fonts', f'{font_name}.flf')
    else:
        # 本地开发时直接用字体名
        return font_name

# 使用示例
figlet = Figlet(font=get_font_path('banner3-d'))

搭配方法1的--add-data命令即可正常运行。


前置准备

确保依赖版本为最新,避免兼容性问题:

pip install --upgrade pyfiglet pyinstaller

内容的提问来源于stack exchange,提问作者Cooked.Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:50:38