Давай с терминами сначала разберемся, их много и каждый использует стандарты для себя какие удобнее
run.py - основной файл
hello_wolrd.py - модуль
folderWorld - папка
__init__.py - настройка
hello.py - модуль в папке folderWorld к примеру
###########################
в питоне есть своя библиотека куда ты устанавливаешь модули pip install
site-packages - стандартная библиотека
Процесс поиска импорта.
Берется sys.path проекта.
Берется <Name> импорта
Далее, смотрим, есть ли <Name>.py (модуль) в sys.path ?
Если нету смотрим есть ли папка <Name> в sys.path, ага есть, значит далее нам импортировщик глядит далее, после названия папки есть что-то? нету, значит идем в init, если там нету = error
Если папки не нашел, то глядит в site-packages если там нет = error
Когда ты запускаешь
run.py создается параметр sys.path который равен папке где лежит
run.pyТы обращаешься к модулу hello_world через - import hello_wolrd или from hello_wolrd import *
Если ты хочешь обратиться к
hello.py ты пишешь import folderWolrd.hello
Если в init ты засунул help = 3, то импорт help будет как from folderWorld import help