Зачем нужно виртуальное окружение и как управлять зависимостями?
- Что такое 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 без версий гарантирует воспроизводимую сборку
Что спросят дальше
Разбор темы
- Окружение, импорты и тесты на pytest
Виртуальные окружения и зависимости, как работает импорт и чем опасны циклические импорты, __name__ == "__main__", pytest, фикстуры и mock.patch.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.