Python使用pyglet加载字体触发FileNotFoundError但文件存在如何解决
问题原因
- 核心问题是路径基准选择错误:
os.getcwd()返回的是你执行python命令时的终端工作目录,而非main.py脚本自身所在的目录。从报错信息可以看到,生成的路径直接在{full_dir_name}下查找fonts文件夹,但实际fonts文件夹和main.py一起存放在{full_dir_name}/build/目录下,路径少了build层级,因此触发文件找不到错误。 - 次要风险点:手动拼接Windows路径的反斜杠存在转义风险,且硬编码斜杠写法不具备跨平台兼容性。
解决方案
以下两种写法都可以正确定位字体文件:
写法1(兼容所有Python版本)
import os from pyglet import font # 获取当前main.py文件所在的目录(即build文件夹的绝对路径) current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接字体文件路径,os.path.join会自动处理不同系统的斜杠格式 font_path = os.path.join(current_script_dir, "fonts", "Roboto Bold.ttf") # 不确定路径是否正确时可以先打印确认 print(font_path) font.add_file(font_path)
写法2(Python 3.4+推荐,更简洁)
from pathlib import Path from pyglet import font # 直接取当前脚本所在目录,拼接字体路径 font_path = Path(__file__).parent / "fonts" / "Roboto Bold.ttf" font.add_file(str(font_path))
快速排查技巧
- 每次拼接完路径后先打印输出,和你实际的字体文件完整路径对比,即可快速发现路径层级错误问题。
- 检查字体文件名的大小写、空格是否和实际文件完全一致,Windows系统虽然不区分大小写,但文件名空格是严格匹配的。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

