__main__.__spec__
Оновлено: 28.04.2023
Залежно від того, як __main__ ініціалізовано, __main__.__spec__ встановлюється відповідним чином або має значення None.
Коли Python запускається з параметром -m, __spec__ встановлюється на специфікацію модуля відповідного модуля або пакета. __spec__ також заповнюється, коли модуль __main__ завантажується як частина виконання каталогу, zip-файлу або іншого запису sys.path.
У решті випадків __main__.__spec__ встановлено на None, оскільки код, який використовується для заповнення __main__, не відповідає безпосередньо імпортованому модулю:
інтерактивна підказка Параметр -c працює з stdin працює безпосередньо з джерела або файлу байт-коду
Зауважте, що __main__.__spec__ завжди має значення None в останньому випадку, навіть якщо технічно файл можна імпортувати безпосередньо як модуль. Використовуйте перемикач -m, якщо потрібні дійсні метадані модуля в __main__.
Зауважте також, що навіть якщо __main__ відповідає імпортованому модулю, а __main__.__spec__ встановлено відповідно, вони все одно вважаються окремими модулями. Це пов’язано з тим, що блоки, які захищаються перевірками if __name__ == "__main__":, виконуються лише тоді, коли модуль використовується для заповнення простору імен __main__, а не під час звичайного імпорту.