Дай угадаю, ты везде используешь относительные пути в файлам?
Тогда дело в текущем рабочем каталоге. Это школьный курс информатики, если что.
Вспомнить всё
Есть два типа путей к файлам - абсолютные (начинаются с буквы диска и идут от корня диска, скажем, C:\Windows\System32\cmd.exe) и относительные (идут не от корня, например, cmd.exe). Для работы с файлом системе в итоге будет нужен абсолютный путь.
Если же ты используешь относительный путь, этот абсолютный путь рассчитывается исходя из текущего рабочего каталога твоей программы. Т.е. если ты обращаешься к app.py, а твой текущий каталог C:\Users\Chupep32\Desktop, то ты обратишься к C:\Users\Chupep32\Desktop\app.py.
Рабочий каталог каталог может, но не обязан совпадать с каталогом, где лежит код программы, и может, но не обязан меняться в ходе её выполнения. У каждой запущенной программы свой текущий рабочий каталог, он может, но не обязан совпадать с текущим каталогом какой-либо другой запущенной программы.
PyCharm перед запуском скрипта выставляет в качестве текущего рабочего каталога папку проекта, поэтому относительные пути работают сразу и без проблем. Но поскольку скрипты можно запускать очень по-разному, то и текущий каталог при запуске может быть разным. Как следствие, полагаться на относительные пути нельзя, как ты только что убедился на горьком опыте.
Если тебе нужно обратиться к файлу именно рядом с твоим скриптом, построй абсолютный путь к нему сам. Встроенный модуль pathlib в помощь.
import sys
from pathlib import Path
SCRIPT_DIR = Path(sys.argv[0]).parent.resolve() # путь к каталогу твоего скрипта
SOME_FILE = SCRIPT_DIR / 'image.png' # путь к файлу в этом каталоге
with open(SOME_FILE, 'rb') as img: # с этим путём работаешь как обычно, преобразуешь его в str, если надо
...