Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
Как работает import, свои модули и пакеты, зависимости через uv и pyproject.toml. Для опытных: lazy import, режим -X lazy_imports и замер времени старта.
- Разбивать программу на модули
- Подключать сторонние пакеты
- Ускорять старт скрипта ленивыми импортами
Début de la leçon
Команда --help, которая думает полсекунды
- Замер на python:3.15-slim, медиана 10 запусков
- import pandas: ~415 мс
- lazy import pandas: ~13 мс
- В статье CodeCut: 280 → 14 мс
Наш трекер обзавёлся отчётами на pandas. И вот вы просите у него обычную справку по командам — а он думает почти полсекунды. Справке pandas не нужен, но импорт стоит наверху файла, и Python грузит библиотеку целиком до первой строчки вашего кода. Мы замерили на чистом Python 3.15: четыреста пятнадцать миллисекунд с обычным импортом и тринадцать с ленивым. Чтобы понять, откуда такая разница, начнём с того, как вообще работает import.
# eager.py
import pandas as pd
print("hello")
# lazy.py — Python 3.15
lazy import pandas as pd
print("hello")
Модуль — это просто файл .py
- Модуль = файл; имя модуля = имя файла без .py
- import categories — весь модуль
- from categories import guess — одно имя
- import x as y — псевдоним
Модуль в Python — это обычный файл с кодом. Никакой магии: положили функции угадывания категории в отдельный файл — и можете подключить их из главного скрипта словом import. Можно взять модуль целиком и обращаться к функциям через точку, а можно вытащить одно конкретное имя. Псевдоним через as сокращает длинные имена — отсюда привычные всем сокращения вроде pd для pandas. Главное — не называйте свои файлы как стандартные модули.
# categories.py
KEYWORDS = {"такси": "Транспорт", "кофе": "Еда"}
def guess(item: str) -> str:
return KEYWORDS.get(item.lower(), "Прочее")
# main.py
import categories
from categories import guess
print(categories.guess("Такси"), guess("Кофе"))
Что делает import на самом деле
- 1. Ищет модуль в sys.modules (кэш)
- 2. Ищет файл по sys.path
- 3. Выполняет файл целиком сверху вниз
- 4. Кладёт объект модуля в кэш
Представьте библиотекаря. Вы просите книгу — он сначала смотрит на свою стойку: не выдавал ли её уже? Если выдавал, отдаёт тот же экземпляр. Это кэш модулей. Если нет — идёт по полкам в определённом порядке: папка скрипта, стандартная библиотека, установленные пакеты. Нашёл файл — и, внимание, выполняет его целиком, от первой строки до последней. Вот почему тяжёлый модуль тормозит: библиотекарь читает всю книгу, прежде чем отдать.
La leçon complète est réservée aux abonnés
Encore 10 diapositives dans la version complète.
La vidéo, toutes les diapositives, le résumé, les tests, le tuteur IA et l'entretien s'ouvrent après connexion et souscription à un abonnement.
Se connecter ou s'inscrire Souscrire un abonnementSommaire de la leçon
- Команда --help, которая думает полсекунды
- Модуль — это просто файл .py
- Что делает import на самом деле
- if __name__ == "__main__": модуль и скрипт в одном
- Пакет: папка модулей
- Зависимости: uv add и pyproject.toml
- Грабли: файл с именем стандартного модуля
- Что нового: lazy import (3.15, PEP 810)
- Ограничения lazy import
- Глобальный режим и совместимость со старыми версиями
- ❓ Стоп-проверка: где выиграет lazy import?
- 💡 Разбор: выигрывают частые короткие запуски
- Итог: трекер — пакет с быстрым стартом
Articles sur cette leçon
- Modules et paquets Python : import, pip, venv et bibliothèques expliqués simplement
- Comment télécharger et installer Python sur Windows, macOS et Linux : pas à pas
- Chaînes de caractères en Python : split, replace, strip, join, tranches et f-strings
- Comment apprendre Python de zéro : plan d'apprentissage pour débutants, étape par étape
- Dictionnaires en Python (dict) : création, méthodes, parcours, tri et frozendict
Toutes les leçons du cours
- Python 3.15 с нуля и для опытных: что нового и как учить
- Python 3.15: установка, REPL и первый скрипт за десять минут
- Переменные, числа и строки в Python: f-строки и t-строки
- Условия, циклы и match/case в Python: управляем ходом программы
- Списки, кортежи, словари и множества: frozendict в Python 3.15
- Comprehensions в Python: распаковка * и ** внутри (PEP 798)
- Функции и аннотации типов в Python: от def до sentinel
- Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
- Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
- Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
- Классы и dataclasses в Python: ООП без лишнего кода
- Асинхронность и потоки в Python: asyncio, TaskGroup и free-threading
- Профилирование Python 3.15: Tachyon вместо cProfile и итоговый проект