Модули и пакеты Python
Зачем нужен блок if __name__ == '__main__'?
При прямом запуске файла Python задает модулю __name__ == '__main__'; при импорте там находится полное имя модуля. Поэтому под этим условием размещают вызов точки входа, а основную логику оставляют в функциях. Импорт тогда создает определения, но не запускает CLI, сервер или побочные записи. Для пакетов аналогичную точку входа можно оформить в __main__.py. Такое поведение проверяют установкой пакета в чистое окружение, где рабочий каталог не маскирует ошибки импорта.
Ссылки для изучения
Когда пакет Python может не содержать __init__.py?
Обычный пакет содержит __init__.py; при импорте этот файл выполняется и может определять публичный интерфейс пакета. По PEP 420 возможен namespace package без __init__.py: его части могут лежать в нескольких каталогах пути импорта и объединяться под одним именем. Простое отсутствие файла не гарантирует успешный импорт, путь должен быть доступен импортной системе, а структура имен не должна конфликтовать. Такое поведение проверяют установкой пакета в чистое окружение, где рабочий каталог не маскирует ошибки импорта.
Ссылки для изучения
Как собрать и проверить Python-пакет?
Метаданные и backend сборки задают в pyproject.toml; src-layout помогает не импортировать исходники случайно. Строят wheel и sdist стандартным frontend, затем устанавливают именно артефакт в чистое окружение. Проверяют импорт, консольные entry points, включение ресурсов, зависимости и тесты установленного пакета. Успешный запуск из корня репозитория сам по себе не доказывает, что wheel собран полно. Такое поведение проверяют установкой пакета в чистое окружение, где рабочий каталог не маскирует ошибки импорта.
Ссылки для изучения







