← Назад к списку
ТехническаяPythonJunior

Как вы управляете зависимостями и окружениями в Python-проекте?

Короткий ответ

  • Виртуальное окружение изолирует зависимости проекта
  • pyproject.toml — современный стандарт описания проекта
  • Прямые зависимости и lock-файл — разные вещи
  • Lock фиксирует точные версии для воспроизводимости
  • Инструменты: pip + venv, poetry, uv, pip-tools
  • Dev-зависимости отделяют от продакшен-зависимостей

Изоляция через виртуальные окружения плюс lock-файл с точными версиями дают воспроизводимые сборки, а pyproject.toml — единый стандарт описания проекта.

Как сказать вслух

пример ответа

На каждый проект я создаю виртуальное окружение, чтобы зависимости не конфликтовали между проектами и с системным Python. Прямые зависимости с диапазонами версий описываются в pyproject.toml, а точные версии всего дерева фиксирует lock-файл — именно он гарантирует, что на CI и у коллег установится ровно то же самое. Сейчас я чаще всего использую uv или poetry: они делают и окружение, и резолвинг, и lock одной командой.

Подробный ответ

Основной ответ

Виртуальное окружение (venv) — каталог со своим интерпретатором и site-packages, изолирующий проект. Декларация проекта стандартизована в pyproject.toml (PEP 621): имя, версия, зависимости с диапазонами (например, httpx>=0.27). Важно различать прямые зависимости и зафиксированный срез всего дерева: lock-файл (poetry.lock, uv.lock, requirements.txt из pip-compile) хранит точные версии и хеши, обеспечивая воспроизводимость на CI и в Docker. Инструменты: связка python -m venv + pip — минимум; poetry и uv добавляют резолвер, lock и управление окружением, причём uv написан на Rust и на порядок быстрее. Dev-зависимости (pytest, ruff, mypy) выносят в отдельную группу, чтобы не тащить их в прод-образ.

Ключевые моменты

  • Зачем изоляция. Два проекта с разными версиями одной библиотеки не должны мешать друг другу и системным пакетам.
  • Диапазоны против lock. В pyproject — совместимые диапазоны, в lock — точные версии с хешами; обновление lock — осознанное действие.
  • Выбор инструмента. pip+venv достаточно для простых случаев; uv/poetry дают скорость, резолвер и единый workflow.
  • CI и Docker. Установка строго из lock-файла (poetry install, uv sync, pip install -r) делает сборки повторяемыми.

Практический контекст

Вопрос проверяет базовую гигиену разработчика: сталкивался ли кандидат с «у меня локально работает», конфликтами версий и сборкой Docker-образов. Хорошо упомянуть фиксацию версии самого Python (.python-version), отдельные dev-группы и регулярное обновление зависимостей с прогоном тестов. Для junior достаточно уверенного владения venv и pip, знание uv/poetry — плюс.

Частые ошибки

  • Ставят пакеты в системный Python и ловят конфликты между проектами
  • Не отличают requirements с диапазонами от lock-файла с точными версиями
  • Коммитят само виртуальное окружение в git вместо lock-файла

ИП Кочкин Алексей Сергеевич · ИНН 390509026279 · ОГРНИП 325390000030973 · jiniys2005@yandex.ru