Cuplikan materi

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

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

модуль пакет pyproject.toml lazy import
Apa yang akan Anda pelajari dalam kuliah ini
  • Разбивать программу на модули
  • Подключать сторонние пакеты
  • Ускорять старт скрипта ленивыми импортами

Awal materi

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

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

Materi lengkap tersedia dengan langganan

10 slide lagi di versi lengkap.

Video, semua slide, catatan, tes, tutor AI, dan wawancara terbuka setelah masuk dan berlangganan.

Masuk atau daftar Berlangganan

Isi materi

  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. Итог: трекер — пакет с быстрым стартом

Artikel terkait materi ini

Semua materi kursus ini

  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 и итоговый проект