Ответ 1
__ 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__
в командной строке.