Виртуални среди на Python през 2026 г.: venv, uv, pipx, поезия — кога да използвате кое
Всеки урок за 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. Конфликти. Проект А се нуждае от django==4.2; Проект B се нуждае от django==5.1. Невъзможно без venvs.
2. Възпроизводимост. „Работи на моята машина“ е системен проблем на Python. Моментната снимка на venv Е средата.
3. Почистване. Изтриване на проект? Изтрийте папката venv. Инсталациите на System-Python се натрупват завинаги.
В macOS 12+ и повечето Linux дистрибуции, system-Python вече е притежаван от OS — 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-writed, 10-100 пъти по-бързо от pip. Заменя venv + pip + pip-tools + pyenv-download-python. Вижте нашето uv дълбоко гмуркане за пълната обиколка.
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 s pip → 2 s 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 .
Използвайте при: инсталиране на базиран на Python CLI. Основно правило: pipx инсталира X, ако X изпраща изпълним файл, който бихте изпълнили от всеки проект; uv pip install X, ако X е библиотека, която импортирате.
Модерна замяна: uv tool install ruff прави същото без отделно инсталиране на pipx. Изберете едно от двете.
4. poetry — зряло шкафче за зависимости (намаляващ дял)
Преди ултравиолетовите лъчи да се приземят, „поезията“ беше основният модерен инструмент за опаковане. Отличен преобразувател на зависимости, детерминистичен poetry.lock, тясна интеграция с pyproject.toml. Все още солиден — но по-бавен от UV и добавя когнитивни разходи.
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-библиотека, което pip не може лесно да произведе.
Двете грешки, които нарушават вашата настройка в рамките на една седмица
1. Комитиране на .venv/ към git
Venv съдържа:
- Абсолютни пътища до вашата конкретна инсталация на Python.
- Компилирани
.pycфайлове. - Двоични файлове, които са специфични за ОС.
Потвърдете, че → вашият съотборник в Windows не може да стартира нищо. ПЪРВО добавете .venv/ (и venv/, .env/) към вашия .gitignore, след което създайте venv.
2. Активиране в грешна обвивка
source .venv/bin/activate задава env vars само в ТЕКУЩА обвивка. Ако отворите нов раздел на терминала, вие се връщате към системния Python. Два безопасни модела:
1. Реактивирайте всяка сесия — стандартният поток.
2. `uv run` / `poetry run` / `python -m project` — никога не се активира изобщо. Изпълнявайте команди от нова обвивка с префикс инструмента. Страхотен в Makefiles, CI, npm-скриптове, git hooks.
Правило за скриптове: ако това е изпълнение на един ред от 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 track обхваща uv + ruff + Docker + модерния стек за внедряване на Python — практически с истински Python, работещ във вашия браузър.