【问题标题】:Resource Not Found Exception in pygletpyglet 中找不到资源异常
【发布时间】:2025-12-09 17:50:01
【问题描述】:

我正在使用 Python 2.6.6 和 pyglet 1.1.4。在我的“Erosion”文件夹中,我有“Erosion.py”和一个名为“Images”的文件夹。在图像内部,有 .png 图像。一张图片被命名为“Guard.png”。

在“Erosion.py”中有一段是这样的:

pyglet.resource.path = ['Images']
pyglet.resource.reindex()
self.image = pyglet.resource.image('%s%s' % (character, '.png'))

当我运行它时,我得到了

File "C:\Python26\lib\site-packages\pyglet\resource.py", line 394, in file raise ResourceNotFoundException(name)
ResourceNotFoundException: Resource "Guard.png" was not found on the path.  Ensure that the filename has the correct captialisation.

我尝试将路径更改为 ['./Images'] 和 ['../Images']。我还尝试删除路径和重新索引调用并将 Erosion.py 和 Guard.png 放在同一个文件夹中。

【问题讨论】:

    标签: pyglet


    【解决方案1】:

    这是我为了能够加载资源所做的:

    pyglet.resource.path = ['C:\\Users\\myname\\Downloads\\temp']
    pyglet.resource.reindex()
    
    pic = pyglet.resource.image('1.jpg')
    
    texture = pic.get_texture()
    gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST)
    
    texture.width = 960
    texture.height = 720
    
    texture.blit(0, 0, 0)
    

    【讨论】:

    • 也就是说,如果你真的需要它的资源处理程序。我使用它是因为它为我提供了一些额外的参数,让我可以通过 GL 库轻松快速地使用它。
    • 这太可怕了。当我调用“reindex()”时,我的计算机似乎几乎可以索引所有内容,并且需要几分钟。
    • @BerryTsakala 它旨在为您提供的补丁下方文件夹中的所有内容编制索引。所以不要把你的脚本放在 `\Downloads` 并从那里索引,而是为你的项目使用一个特定的文件夹。
    • 我只想播放一个文件;在哪里应该没关系。无论如何,我在 Windows 中使用它时遇到了很多麻烦(例如,使用 avbin),我完全放弃了 pyglet,转而使用其他模块。
    【解决方案2】:

    试试this

    pyglet.image.load('path/to/image.png')
    

    【讨论】:

    【解决方案3】:

    如果相对路径不起作用,您可以使用 os 模块尝试使用绝对路径。

    import pyglet
    import os
    
    working_dir = os.path.dirname(os.path.realpath(__file__))
    pyglet.resource.path = [os.path.join(working_dir,'Images')]
    pyglet.resource.reindex()
    
    image = pyglet.resource.image('character.png'))
    

    最好使用 os.path.join 方法,而不是将其写成字符串,以获得更好的跨平台支持。

    【讨论】:

    • 你假设'character.png'在working_dir + "/Images/"
    【解决方案4】:

    我在使用 pyglet 和 pyscripter(文本编辑器)时遇到了这样的问题。为了找到文件,我必须在运行程序之前重新启动编辑器。

    这可能是 pyscripter 的问题。

    【讨论】:

    • 如果 pyglet 不允许直接指定完整路径名,这是 pyglet 的问题。
    • 您可能不得不重新启动资源文件列表。
    【解决方案5】:

    值得关注:http://pyglet.readthedocs.io/en/pyglet-1.3-maintenance/programming_guide/resources.html

    您应该将所有目录包含到:

     pyglet.resource.path = [...]
    

    然后在调用时只传递文件名:

    pyglet.resource.image("ball_color.jpeg")
    

    试试:

    import os
    import pyglet
    
    working_dir = os.path.dirname(os.path.realpath(__file__))
    image_dir = os.path.join(working_dir, 'images')
    sound_dir = os.path.join(working_dir, 'sound')
    
    print working_dir
    print "Images are in: " + image_dir
    print "Sounds are in: " + sound_dir
    
    pyglet.resource.path = [working_dir, image_dir, sound_dir]
    pyglet.resource.reindex()
    
    try:
        window = pyglet.window.Window()
        image = pyglet.resource.image("ball_color.jpeg")
    
        @window.event
        def on_draw():
            window.clear()
            image.blit(0, 0)
    
        pyglet.app.run()
    
    finally:
        window.close()
    

    tryfinally 的使用不是必须的,但建议使用它们。如果出现错误时不关闭窗口,最终可能会打开很多窗口和 pyglet back 进程。

    【讨论】:

      【解决方案6】:

      pyglet 1.4.4 格式:HUD_img = pyglet.resource.image('ui\ui_gray_block_filled.png')

      pyglet 1.4.8 格式:HUD_img = pyglet.resource.image('ui/ui_gray_block_filled.png')

      我使用的是 pyglet 1.4.4 并且能够使用第一种格式。 升级到 pyglet 1.4.8 后出现错误:pyglet.resource.ResourceNotFoundException: Resource "your_resource_path" is not found on the path.

      使用正斜杠切换到第二种格式为我解决了这个问题。不知道为什么要进行此更改...我确信这是有充分理由的。

      【讨论】: