Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
Как работает import, свои модули и пакеты, зависимости через uv и pyproject.toml. Для опытных: lazy import, режим -X lazy_imports и замер времени старта.
- Разбивать программу на модули
- Подключать сторонние пакеты
- Ускорять старт скрипта ленивыми импортами
Dersin başlangıcı
Команда --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. Кладёт объект модуля в кэш
Представьте библиотекаря. Вы просите книгу — он сначала смотрит на свою стойку: не выдавал ли её уже? Если выдавал, отдаёт тот же экземпляр. Это кэш модулей. Если нет — идёт по полкам в определённом порядке: папка скрипта, стандартная библиотека, установленные пакеты. Нашёл файл — и, внимание, выполняет его целиком, от первой строки до последней. Вот почему тяжёлый модуль тормозит: библиотекарь читает всю книгу, прежде чем отдать.
Tam ders abonelikle açılır
Tam sürümde 10 slayt daha var.
Video, tüm slaytlar, notlar, testler, AI öğretmeni ve mülakat, giriş yapıp abone olduktan sonra açılır.
Giriş yap veya kayıt ol Abone olDers içeriği
- Команда --help, которая думает полсекунды
- Модуль — это просто файл .py
- Что делает import на самом деле
- if __name__ == "__main__": модуль и скрипт в одном
- Пакет: папка модулей
- Зависимости: uv add и pyproject.toml
- Грабли: файл с именем стандартного модуля
- Что нового: lazy import (3.15, PEP 810)
- Ограничения lazy import
- Глобальный режим и совместимость со старыми версиями
- ❓ Стоп-проверка: где выиграет lazy import?
- 💡 Разбор: выигрывают частые короткие запуски
- Итог: трекер — пакет с быстрым стартом
Kursun tüm dersleri
- 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 и итоговый проект