Ausschnitt der Lektion

Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)

Как работает import, свои модули и пакеты, зависимости через uv и pyproject.toml. Для опытных: lazy import, режим -X lazy_imports и замер времени старта.

модуль пакет pyproject.toml lazy import
Was Sie in dieser Lektion lernen werden
  • Разбивать программу на модули
  • Подключать сторонние пакеты
  • Ускорять старт скрипта ленивыми импортами

Anfang der Lektion

Команда --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. Кладёт объект модуля в кэш

Представьте библиотекаря. Вы просите книгу — он сначала смотрит на свою стойку: не выдавал ли её уже? Если выдавал, отдаёт тот же экземпляр. Это кэш модулей. Если нет — идёт по полкам в определённом порядке: папка скрипта, стандартная библиотека, установленные пакеты. Нашёл файл — и, внимание, выполняет его целиком, от первой строки до последней. Вот почему тяжёлый модуль тормозит: библиотекарь читает всю книгу, прежде чем отдать.

Die vollständige Lektion — mit Abo

Noch 10 Folien in der vollständigen Version.

Video, alle Folien, Notizen, Tests, KI-Tutor und Interview werden nach Anmeldung und Abschluss eines Abos freigeschaltet.

Anmelden oder registrieren Abo abschließen

Inhalt der Lektion

  1. Команда --help, которая думает полсекунды
  2. Модуль — это просто файл .py
  3. Что делает import на самом деле
  4. if __name__ == "__main__": модуль и скрипт в одном
  5. Пакет: папка модулей
  6. Зависимости: uv add и pyproject.toml
  7. Грабли: файл с именем стандартного модуля
  8. Что нового: lazy import (3.15, PEP 810)
  9. Ограничения lazy import
  10. Глобальный режим и совместимость со старыми версиями
  11. ❓ Стоп-проверка: где выиграет lazy import?
  12. 💡 Разбор: выигрывают частые короткие запуски
  13. Итог: трекер — пакет с быстрым стартом

Alle Lektionen des Kurses

  1. Python 3.15 с нуля и для опытных: что нового и как учить
  2. Python 3.15: установка, REPL и первый скрипт за десять минут
  3. Переменные, числа и строки в Python: f-строки и t-строки
  4. Условия, циклы и match/case в Python: управляем ходом программы
  5. Списки, кортежи, словари и множества: frozendict в Python 3.15
  6. Comprehensions в Python: распаковка * и ** внутри (PEP 798)
  7. Функции и аннотации типов в Python: от def до sentinel
  8. Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
  9. Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
  10. Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
  11. Классы и dataclasses в Python: ООП без лишнего кода
  12. Асинхронность и потоки в Python: asyncio, TaskGroup и free-threading
  13. Профилирование Python 3.15: Tachyon вместо cProfile и итоговый проект