Вопрос-Ответ

Could not open resource file, pygame error: "FileNotFoundError: No such file or directory."

Не удалось открыть файл ресурсов, ошибка pygame: "FileNotFoundError: нет такого файла или каталога".
Import pygame

pygame.init()

BG = pygame.image.load('_pycache_/test_bg.jpg')

def DrawGameWin():
window.blit(BG,(0,0))

pygame.display.update()


DrawGameWin()
Переведено автоматически
Ответ 1

Путь к файлу ресурса (изображения, шрифта, звука и т.д.) Должен быть относительно текущего рабочего каталога. Рабочий каталог, возможно, отличается от каталога файла python.
Недостаточно поместить файлы в один каталог или подкаталог. Вам также необходимо указать рабочий каталог. В качестве альтернативы вы можете создать абсолютный путь к файлу.


Имя и путь к файлу можно получить с помощью __file__. Текущий рабочий каталог можно получить с помощью os.getcwd() и его можно изменить с помощью os.chdir(path):

import os

os.chdir(os.path.dirname(os.path.abspath(__file__)))

Альтернативное решение - найти абсолютный путь.
Если файл находится во вложенной папке файла python (или даже в той же папке), то вы можете получить каталог файла и присоединиться (os.path.join()) к относительному пути к файлу. например:

import pygame
import os

# get the directory of this file
sourceFileDir = os.path.dirname(os.path.abspath(__file__))

# [...]

# join the filepath and the filename
filePath = os.path.join(sourceFileDir, 'test_bg.jpg')
# filePath = os.path.join(sourceFileDir, '_pycache_/test_bg.jpg')

surface = pygame.image.load(filePath)

То же самое можно сделать с pathlib модулем.
Измените рабочий каталог

import os, pathlib

os.chdir(pathlib.Path(__file__).resolve().parent)

или создайте абсолютный путь к файлу:

import pathlib

# [...]

filePath = pathlib.Path(__file__).resolve().parent / 'test_bg.jpg'
surface = pygame.image.load(filePath)
python image pygame