Виртуальные среды Python в 2026 году: venv, uv, pipx, поэзия — когда что использовать
В каждом учебнике по Python говорится «используйте виртуальную среду» и идете дальше. Этот делает все возможное: что такое венв на самом деле, четыре инструмента, которые стоит знать в 2026 году, 60-секундное дерево принятия решений для выбора правильного и две ошибки, которые сломают вашу настройку в течение недели.
Что такое виртуальная среда на самом деле
venv — это каталог, содержащий символическую ссылку интерпретатора Python и частный файл `site-packages/`. Когда он «активирован», PATH добавляет <venv>/bin, поэтому python и pip в вашей оболочке указывают на копии venv. pip install X записывает в site-packages/ venv, а не в системный Python.
Вот и все. Никакой магии. Это папка с символической ссылкой и файлом pyvenv.cfg.
BASH$ python -m venv .venv $ ls .venv/ bin/ include/ lib/ pyvenv.cfg $ cat .venv/pyvenv.cfg home = /opt/homebrew/opt/python@3.13/bin include-system-site-packages = false version = 3.13.2
Все остальное (активация скриптов, оберток, менеджеров пакетов) — это удобство поверх этой формы.
Зачем он вам нужен всегда
Без venv pip install X записывает в site-packages/ вашей системы Python. Три проблемы:
1. Конфликты. Проекту A требуется django==4.2; Проекту B нужен django==5.1. Без венвса невозможно.
2. Воспроизводимость. «Работает на моей машине» — это системная проблема Python. Снимок venv — это среда.
3. Очистка. Удалить проект? Удалите папку venv. Установки System-Python накапливаются навсегда.
В macOS 12+ и большинстве дистрибутивов Linux system-Python теперь принадлежит ОС — pip может даже отказаться от установки без --break-system-packages. Это подсказка.
4 инструмента, которые стоит знать
1. venv — базовая версия stdlib
Поставляется с каждой установкой Python 3.3+. Ноль зависимостей. Универсальный запасной вариант:
BASHpython -m venv .venv # create source .venv/bin/activate # macOS / Linux .venv\Scripts\activate # Windows pip install -r requirements.txt deactivate # or close the shell
Используйте, когда: пишете руководство, гарантируете, что скрипт работает везде, или в заблокированной CI, где вы не можете ничего установить.
2. uv — современное значение по умолчанию (2026 г.)
Написан на Rust, в 10-100 раз быстрее, чем pip. Заменяет venv + pip + pip-tools + pyenv-download-python. Полный обзор смотрите в нашем uv-dive.
BASHuv venv # create venv (uses current Python) uv venv --python 3.13 # or download + pin a version uv pip install -r requirements.txt uv run pytest # run without activating uv add fastapi # append to pyproject.toml + install uv sync # install exactly what pyproject.toml says
Используйте, когда: любой проект 2026 года — индивидуальный, командный, CI, Docker. Разница в скорости в холодном кеше реальна (45 секунд в точках → 2 секунды в типичном проекте Django).
3. pipx — для инструментов CLI
Когда вы устанавливаете CLI, такой как ruff, httpie, black, youtube-dl, mypy, вы не хотите, чтобы он был в вашем проекте venv (зачем зависеть от ruff для работы import project.things?). И вы не хотите этого в системе Python (конфликты). pipx помещает каждого в отдельный изолированный венв, но предоставляет CLI глобально:
BASHpipx install ruff pipx install httpie pipx install black ruff check . # works from anywhere, no activation httpie GET api.github.com black .
Используйте при: установке CLI на основе Python. Эмпирическое правило: pipx install X, если X предоставляет исполняемый файл, который вы могли бы запустить из любого проекта; uv pip install X, если X — это библиотека, которую вы импортируете.
Современная замена: uvtool install ruff делает то же самое без отдельной установки pipx. Выбирайте любой.
4. poetry — зрелый шкафчик зависимостей (снижающаяся доля)
До того, как появился ультрафиолет, «поэзия» была популярным современным упаковочным инструментом. Отличный преобразователь зависимостей, детерминированный poetry.lock, тесная интеграция с pyproject.toml. Все еще прочный, но медленнее, чем ультрафиолетовый, и добавляет когнитивные нагрузки.
BASHpoetry new my-project poetry add fastapi poetry install poetry run pytest poetry publish
Используйте, когда: существующий проект уже использует поэзию или вам нужны плагины, специфичные для поэзии (например, poetry-plugin-export). Что касается НОВЫХ проектов в 2026 году, «uv» поможет вам быстрее и с меньшими затратами.
Дерево решений за 60 секунд
Вот и все. 90% разработчиков Python сегодня могут выбирать из этого списка, даже не нуждаясь в pyenv, virtualenvwrapper, pew или conda.
Конда — особый случай
conda — это отдельная вселенная: менеджер пакетов + менеджер venv + дистрибьютор Python + менеджер C-библиотек, в первую очередь для научного Python. Если вы выполняете тяжелую числовую работу со стеками numpy/scipy/pandas/GPU, которым нужны совпадающие версии CUDA + cuDNN, miniconda все равно может стоить того — предварительно скомпилированные двоичные файлы экономят часы по сравнению с pip.
В противном случае: обычный uv теперь конкурентоспособен и в научных стеках (установки numpy / pandas занимают секунды, а не минуты). Не обращайтесь к conda, если вам конкретно не нужен связывающий пункт C-библиотеки, который невозможно легко создать.
Две ошибки, которые сломают вашу настройку за неделю
1. Коммит .venv/ в git
Венв содержит:
— Абсолютные пути к вашей конкретной установке Python.
— Скомпилированные файлы .pyc.
- Двоичные файлы, специфичные для ОС.
Зафиксируйте это → ваш товарищ по команде в Windows не сможет ничего запустить. Добавьте .venv/ (и venv/, .env/) к вашему .gitignore СНАЧАЛА, затем создайте файл venv.
2. Активация не в той оболочке
source .venv/bin/activate устанавливает переменные env только в ТЕКУЩЕЙ оболочке. Если вы откроете новую вкладку терминала, вы вернетесь к системному Python. Два безопасных шаблона:
1. Повторно активируйте каждый сеанс — стандартный процесс.
2. `uv run`/`poetry run`/`python -m project` — вообще никогда не активировать. Запускайте команды из новой оболочки с префиксом этого инструмента. Отлично работает с Makefiles, CI, npm-скриптами, git-хуками.
Правило для скриптов: если это однострочный запуск из CI или Makefile, НЕ активируйте — используйте uv run pytest или полный путь .venv/bin/pytest. Активация предназначена только для интерактивных оболочек.
Миграция между инструментами
пип + венв → уф:
BASHrm -rf .venv uv venv uv pip install -r requirements.txt
Требование.txt продолжает работать дословно. Две минуты.
поэзия → уф:
BASHuvx migrate-to-uv # community tool, converts pyproject.toml
venv → стихи:
BASHpoetry init poetry add $(pip freeze | cut -d= -f1)
Проверка
После установки всегда проверяйте, КАКОЙ Python + pip вы используете:
BASH$ which python /path/to/project/.venv/bin/python # ✅ venv /opt/homebrew/bin/python # ❌ system, activation didn't take $ which pip /path/to/project/.venv/bin/pip # ✅ venv $ python -c "import sys; print(sys.prefix)" /path/to/project/.venv # ✅ venv
Если какой питон показывает системный путь после активации, что-то не так — обычно вы активировали в подоболочке, которая уже вышла.
Виртуальные среды — одна из немногих тем Python, современный ответ (2026 г.) действительно проще, чем исторический. uv для новых проектов, venv для скриптов, pipx для CLI. Сделанный.
Следующий шаг: Python DevOps track охватывает uv + ruff + Docker + современный стек развертывания Python — практический опыт работы с реальным Python, работающим в вашем браузере.