Віртуальні середовища Python у 2026 році: venv, uv, pipx, poetry — коли використовувати які
У кожному підручнику з Python говориться «використовуйте віртуальне середовище» і йде далі. У цьому випадку ми докладаємо додаткових зусиль: що насправді ТАКЕ venv, чотири інструменти, які варто знати у 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. Неможливо без venvs.
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)
Іржаве написання, в 10-100 разів швидше, ніж pip. Замінює venv + pip + pip-tools + pyenv-download-python. Перегляньте наш uv-deep-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 с UV у типовому проекті Django).
3. pipx — для інструментів CLI
Коли ви встановлюєте CLI, як-от ruff, httpie, black, youtube-dl, mypy, ви не хочете, щоб він був у вашому проекті venv (чому покладатися на ruff для роботи import project.things?). І ви не хочете цього в системі Python (конфлікти). pipx поміщає кожен у свій власний ізольований venv, але надає 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 є бібліотекою, яку ви імпортуєте.
Сучасна заміна: uv tool 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 — окремий випадок
conda — це окремий всесвіт: менеджер пакунків + менеджер venv + дистрибутор Python + менеджер C-бібліотек, переважно для наукового Python. Якщо ви виконуєте важку чисельну роботу зі стеками numpy / scipy / pandas / GPU, які потребують узгоджених версій CUDA + cuDNN, miniconda все ще може того варти — попередньо скомпільовані двійкові файли економлять години порівняно з pip.
В іншому випадку: звичайний uv тепер конкурентоспроможний і на наукових стеках (встановлення numpy / pandas займають секунди, а не хвилини). Не тягніться до conda, якщо вам спеціально не потрібна зв’язка C-бібліотеки, яку неможливо створити.
Дві помилки, які порушують налаштування протягом тижня
1. Закріплення .venv/ для git
Venv містить:
- Абсолютні шляхи до вашої конкретної інсталяції 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. Активація лише для інтерактивних оболонок.
Міграція між інструментами
pip + venv → uv:
BASHrm -rf .venv uv venv uv pip install -r requirements.txt
Requirements.txt продовжує працювати дослівно. Дві хвилини.
поезія → uv:
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
Якщо which python показує системний шлях після активації, щось не так — зазвичай ви активували в підоболонці, яка вже вийшла.
Віртуальні середовища є однією з небагатьох тем Python, де сучасна відповідь (2026) справді простіша, ніж історична. uv для нових проектів, venv для скриптів, pipx для CLI. Готово.
Наступний крок: Python DevOps трек охоплює uv + ruff + Docker + сучасний стек розгортання Python — практичні заняття зі справжнім Python, запущеним у вашому браузері.