Вопрос с собеседования · Python

Зачем нужно виртуальное окружение и как управлять зависимостями?

JuniorОкружение и инструменты
Ещё спрашивают так:
  • Что такое venv?
  • Как зафиксировать версии библиотек проекта?
  • Чем pip отличается от poetry и uv?
Коротко

Виртуальное окружение — отдельная копия Python со своими пакетами для каждого проекта.

  • Проекты не конфликтуют версиями библиотек, системный Python не засоряется
  • python -m venv .venv, активация, pip install -r requirements.txt

А ещё Версии фиксируют lock-файлом: pip freeze, poetry.lock, uv.lock

Подробно

Без окружения все пакеты ставятся в один общий Python. Если проекту A нужна Django 4, а проекту B — Django 5, они начинают мешать друг другу. Кроме того, pip install в системный Python может сломать системные утилиты.

venv создаёт папку с собственным интерпретатором и каталогом пакетов:

  • python -m venv .venv — создать;
  • source .venv/bin/activate (Linux, macOS) или .venv\Scripts\activate (Windows) — активировать;
  • после этого pip install ставит пакеты только в это окружение.

Папку окружения в git не кладут — её всегда можно пересоздать.

Зависимости. Минимальный вариант — requirements.txt: список пакетов с версиями, полученный через pip freeze > requirements.txt. Он фиксирует и прямые, и транзитивные зависимости, но не разделяет их.

Современные инструменты разделяют «что нужно проекту» (pyproject.toml) и «точные версии всего дерева» (lock-файл):

  • poetry — управление зависимостями, lock-файл, сборка пакетов;
  • uv — очень быстрый установщик и менеджер проектов и окружений.

Lock-файл гарантирует, что у коллеги, в CI и на сервере стоят одни и те же версии.

Пример

python -m venv .venv
source .venv/bin/activate
pip install requests==2.32.3
pip freeze > requirements.txt

# на другой машине
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# то же через uv
uv init && uv add requests && uv sync

Что хотят услышать

  • Зачем окружение: изоляция версий и защита системного Python.
  • Команды создания, активации, установки.
  • Фиксация версий и смысл lock-файла.
  • Знание хотя бы одного современного инструмента — плюс.

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

  • Класть .venv в репозиторий.
  • Ставить зависимости через sudo pip install в системный Python.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Пакеты лучше ставить в системный Python, общий для всех проектов, без lock-файла
  • ✓Свой набор пакетов на проект, чтобы версии не конфликтовали; версии фиксирует lock-файл
  • ✗Виртуальное окружение — это виртуальная машина с отдельной ОС
  • ✗requirements.txt без версий гарантирует воспроизводимую сборку

Что спросят дальше

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования