Обычно программы пишут на компилируемых языках и изображения зашиваются в бинарник в качестве ресурсов. В программах на интерпретируемых языках можно изображение включить в код в виде base64-кодированной строки, но это плохая идея, так как увеличит потребление памяти интерпретатором. Есть ещё костыли, вроде pyinstaller, но они просто создают самораспаковывающийся архив, так что файл изображения по сути будет лежать рядом с программой.