Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
Как работает import, свои модули и пакеты, зависимости через uv и pyproject.toml. Для опытных: lazy import, режим -X lazy_imports и замер времени старта.
- Разбивать программу на модули
- Подключать сторонние пакеты
- Ускорять старт скрипта ленивыми импортами
Início da aula
Команда --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. Кладёт объект модуля в кэш
Представьте библиотекаря. Вы просите книгу — он сначала смотрит на свою стойку: не выдавал ли её уже? Если выдавал, отдаёт тот же экземпляр. Это кэш модулей. Если нет — идёт по полкам в определённом порядке: папка скрипта, стандартная библиотека, установленные пакеты. Нашёл файл — и, внимание, выполняет его целиком, от первой строки до последней. Вот почему тяжёлый модуль тормозит: библиотекарь читает всю книгу, прежде чем отдать.
A aula completa é para assinantes
Mais 10 slides na versão completa.
O vídeo, todos os slides, anotações, testes, tutor de IA e entrevista ficam disponíveis após entrar e assinar.
Entrar ou cadastrar-se AssinarConteúdo da aula
- Команда --help, которая думает полсекунды
- Модуль — это просто файл .py
- Что делает import на самом деле
- if __name__ == "__main__": модуль и скрипт в одном
- Пакет: папка модулей
- Зависимости: uv add и pyproject.toml
- Грабли: файл с именем стандартного модуля
- Что нового: lazy import (3.15, PEP 810)
- Ограничения lazy import
- Глобальный режим и совместимость со старыми версиями
- ❓ Стоп-проверка: где выиграет lazy import?
- 💡 Разбор: выигрывают частые короткие запуски
- Итог: трекер — пакет с быстрым стартом
Artigos sobre esta aula
- Módulos e pacotes em Python: import, pip, venv e bibliotecas em linguagem simples
- Como baixar e instalar o Python no Windows, macOS e Linux: passo a passo
- Strings em Python: métodos split, replace, strip, join, fatias e f-strings
- Como aprender Python do zero: plano de estudos para iniciantes passo a passo
- Dicionários em Python (dict): criação, métodos, iteração, ordenação e frozendict
Todas as aulas do curso
- 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 и итоговый проект