__ init __. py запускается при импорте пакета в запущенную программу python. Например, import idlelib внутри программы запускает idlelib/__init__.py, что ничего не делает, поскольку его единственная цель - пометить каталог idlelib как пакет. С другой стороны, tkinter/__init__.py содержит большую часть кода tkinter и определяет все классы виджетов.
__ main __. py запускается как "__main__" при запуске пакета в качестве основной программы. Например, python -m idlelib в командной строке запускает idlelib/__main__.py, который запускает Idle. Аналогично, python -m tkinter работает tkinter/__main__.py, у которого есть эта строка:
from . import _test as main
В этом контексте . - tkinter, поэтому импорт . импортирует tkinter, который работает tkinter/__init__.py. _test - это функция, определенная внутри этого файла. Поэтому вызов main() (следующая строка) имеет тот же эффект, что и запуск python -m tkinter.__init__ в командной строке.
Ответ 2
__init__.py, среди прочего, называет каталог как каталог python и позволяет устанавливать переменные на уровне пакета.
__main__.py, помимо прочего, запускается, если вы пытаетесь запустить сжатую группу файлов python. __main__.py позволяет выполнять пакеты.
Оба этих ответа были получены из ответов, которые вы связывали. Есть ли что-то еще, что вы не поняли об этих вещах?