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

Python加载shader文件报FileNotFoundError如何解决

问题现象

主Python脚本存放在shader代码文件夹的外层目录,代码中通过相对路径加载shader文件:

self.shader = self.createShader("shaders/vertex.txt", "shaders/fragment.txt")

运行时直接抛出文件不存在错误:

FileNotFoundError: [Errno 2] No such file or directory: 'shaders/vertex.txt'

核心原因

Python代码中写的相对路径,默认以程序启动时的工作目录为解析基准,不是以Python脚本自身所在的目录为基准。绝大多数这类报错都是因为运行脚本时的工作目录,和写路径时预期的基准目录不一致。

排查步骤
  • 先定位实际生效的工作目录:在调用shader加载逻辑前加两行代码,打印当前程序识别到的工作目录:
import os
print(os.getcwd())

运行后拿到输出的路径,到对应路径下检查是否存在shaders/vertex.txt,基本能立刻定位路径偏移问题。常见触发场景包括:在终端其他目录下跨路径调用脚本、IDE运行配置默认把工作目录设为项目根目录而非脚本所在目录。

  • 核对文件名、文件夹名拼写:Linux/macOS系统严格区分大小写,检查是否把shaders拼成了shader,同时留意系统是否开了后缀名隐藏,导致实际文件是vertex.txt.txt这类和代码写法不匹配的情况。
  • 核对目录层级:确认shaders文件夹没有被误移动到其他位置,也没有多嵌套一层子目录。
可靠修复方案

不要硬编码相对路径,改为基于当前脚本文件的绝对位置拼接shader路径,不管从什么目录启动脚本都不会出现路径错误,还能自动适配不同操作系统的路径分隔符:

import os
# 获取当前脚本文件所在的绝对目录
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
# 拼接shader文件的完整路径
vertex_shader_path = os.path.join(SCRIPT_DIR, "shaders", "vertex.txt")
fragment_shader_path = os.path.join(SCRIPT_DIR, "shaders", "fragment.txt")

self.shader = self.createShader(vertex_shader_path, fragment_shader_path)

如果只是临时调试,也可以在运行脚本前先通过cd命令切到脚本所在目录再执行脚本,或是修改IDE运行配置里的Working directory为脚本所在目录,但这两种方式换运行环境就容易复现问题,不推荐作为长期方案。

内容的提问来源于stack exchange,提问作者Artur Moszczyński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:24:11