pip, pipx, venv, virtualenv, uv
Пять похожих по звучанию инструментов — и очень разные задачи, которые каждый из них решает.
К этому моменту вы уже пользовались pip и
venv (разделы 2.11–2.12). В экосистеме Python есть ещё несколько
похожих по звучанию инструментов — разберём каждый отдельно, а не единым списком, чтобы не
путать их друг с другом.
pip
pip устанавливает, обновляет и удаляет пакеты в уже существующее активное окружение. Он ничего не создаёт — только наполняет то, что уже есть.
pip install requests
pip install requests==2.31.0
pip uninstall requests
venv
venv — модуль стандартной библиотеки (раздел 2.11), который делает ровно одну вещь: создаёт новое изолированное окружение. Он входит в сам Python — устанавливать его отдельно не нужно.
virtualenv
virtualenv — сторонний пакет, предшественник venv
(модуль venv в стандартной библиотеке во многом вырос именно из него). Он решает ту же
задачу, но исторически работает быстрее и поддерживает чуть больше сценариев (например,
старые версии Python, где встроенного venv ещё не было). Для этого курса вам полностью
хватит обычного venv — virtualenv стоит знать по имени, если
встретите его в чужом проекте.
pipx
pipx решает другую задачу — не «пакет для моего проекта», а «программа с
интерфейсом командной строки, которой я хочу пользоваться из любой папки». Пример: инструмент
форматирования кода black — вы не импортируете его в свой код, вы
запускаете его как команду. pipx автоматически создаёт для каждой такой программы своё
отдельное окружение, но делает саму команду доступной глобально, из любой папки — без
активации.
pipx install black
black my_script.py
uv
uv (от компании Astral — они же делают Ruff, раздел 2.7) — относительно новый инструмент, который сам себя описывает как единую замену сразу для pip, pip-tools, pipx, poetry, pyenv, virtualenv и других. Его главное преимущество — скорость: uv в 10–100 раз быстрее pip на типичных операциях, потому что написан на Rust и агрессивно кеширует пакеты.
uv venv
uv pip install requests
uv run my_script.py
Сравнение
| Инструмент | Что делает | Устанавливает пакеты | Создаёт окружения |
|---|---|---|---|
| pip | Устанавливает пакеты в текущее активное окружение | Да | Нет |
| venv | Создаёт изолированные окружения (входит в стандартную библиотеку) | Нет | Да |
| virtualenv | Более старый и быстрый сторонний аналог venv | Нет | Да |
| pipx | Устанавливает CLI-приложения на Python глобально, каждое — в своё изолированное окружение | Да (для приложений) | Да (по одному на приложение, автоматически) |
| uv | Один быстрый инструмент, заменяющий pip, venv, virtualenv, pipx и другие | Да | Да |
pip и venv — это стандарт, который работает везде «из коробки» и на котором проще всего понять, что происходит на самом деле. Если позже вам понравится скорость uv — переключиться легко: команды почти зеркальные.