uv: Menedżer pakietów Pythona, który zastępuje pip, pip-tools i venv (przewodnik 2026)
Jeśli spędziłeś w tym roku jakiś czas nad projektem w Pythonie, prawdopodobnie widziałeś „uv” pojawiające się w pliku README lub CI. Jest to napisany w Rust menedżer pakietów i narzędzie virtualenv firmy Astral (ten sam zespół, który stoi za ruff) — i jest 10-100 razy szybszy niż klasyczna kombinacja pip / pip-tools / venv.
W tym przewodniku omówiono: co właściwie zastępuje uv, pięć poleceń, które obejmują 95% tego, co robisz codziennie, oraz dwa przypadki, w których powinieneś pozostać przy klasycznych narzędziach.
Co zastępuje UV
| Klasyczne narzędzie | odpowiednik UV | Przyspieszenie |
|---|---|---|
| python -m venv .venv | uv venv | ~5x |
| pip zainstaluj pakiet | uv pip zainstaluj pakiet | ~10-50x |
| pip install -r wymagania.txt | uv pip install -r wymagania.txt | 20-100x na zimnej pamięci podręcznej |
| pip-compile (narzędzia pip) | kompilacja pip uv | ~50x |
| python -m venv + aktywacja źródła dla każdego projektu | uv uruchom <cmd> | Całkowicie pomija aktywację |
Różnica prędkości jest realna. Instalacja umiarkowanego projektu Django (Django + DRF + seler + redis + boto3 + ~40 deps przechodnich) w zimnej pamięci podręcznej zajmuje ~45 sekund w przypadku pip i ~2 sekundy w przypadku uv. W ciepłej pamięci podręcznej UV jest zasadniczo natychmiastowe, ponieważ wykorzystuje globalną pamięć podręczną z twardym łączem zamiast kopiować pliki do każdego Venv.
Pięć poleceń, których będziesz używać
1. Zainstaluj sam UV
BASH# macOS + Linux — one line, no sudo, no Python needed curl -LsSf https://astral.sh/uv/install.sh | sh # Windows PowerShell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Or via brew / apt / your package manager (updated frequently) brew install uv
uv jest pojedynczym, samodzielnym plikiem binarnym — bez ładowania początkowego Pythona i żadnych własnych zależności.
2. Utwórz środowisko wirtualne
BASHcd my-project uv venv # creates .venv/ using the current Python uv venv --python 3.13 # or pin a version — uv will download it if missing
W przeciwieństwie do python -m venv, uv może pobrać wersję Pythona, o którą prosiłeś. Koniec z trzyetapowym tańcem typu „pyenv zainstaluj, następnie venv, a następnie aktywuj”.
3. Zainstaluj pakiety
BASHuv pip install fastapi httpx # into the current venv uv pip install -r requirements.txt # bulk install uv pip install -e . # editable install of current project
Składnia jest celowo identyczna z pip — zamień pip na uv pip i wszystko działa. Koszt migracji: pięć naciśnięć klawiszy.
4. Zamroź/kompiluj wymagania
BASH# From an installed venv → requirements.txt (like `pip freeze`) uv pip freeze > requirements.txt # From a loose requirements.in → fully pinned requirements.txt (like pip-compile) uv pip compile requirements.in -o requirements.txt
Krok „kompilacji” jest deterministyczny — to samo wejście, to samo wyjście, bajt po bajcie. Idealny do powtarzalnych CI.
5. Uruchom polecenie bez aktywowania venv
BASHuv run pytest # runs pytest from the current venv uv run python manage.py migrate # any command, any script uv run --with ipython python # temporarily add ipython for this session
To jest zabójcza funkcja. Koniec z „source .venv/bin/activate” przed każdym poleceniem. Świetny w CI, świetny w Makefiles, świetny w skryptach Shell.
Migracja istniejącego projektu (2 minuty)
Zakładając, że masz plik requirements.txt:
BASH# 1. Nuke the old venv rm -rf .venv # 2. Create the uv venv uv venv # 3. Install uv pip install -r requirements.txt # 4. Verify uv run python -c "import fastapi; print(fastapi.__version__)"
Cztery polecenia gotowe. Twój plik requirements.txt nie musi się zmieniać. Twój plik pyproject.toml nie musi się zmieniać. Twój CI prawie nie musi się zmieniać — zamień krok instalacji i gotowe.
Ścieżka natywna pyproject.toml (projekty uv-first)
W przypadku projektów rozpoczynanych od zera użyj natywnego przepływu pracy uv — bez żadnych wymagań.txt:
BASHuv init my-project # generates pyproject.toml + .python-version + .gitignore cd my-project uv add fastapi # adds fastapi to pyproject.toml [dependencies] AND installs uv add --dev pytest # adds to dev-dependencies uv sync # installs exactly what pyproject.toml says (uses uv.lock) uv lock --upgrade # bumps every dependency to its latest compatible version
Ma ten sam kształt co „cargo” dla Rusta lub „npm” dla Node — jeden plik konfiguracyjny, jeden plik blokady, instalacje deterministyczne. Jeśli zaczynasz od nowa w 2026 r., to jest właściwa ścieżka.
Kiedy nadal używać pip / venv
Dwa przypadki:
1. Starsze systemy CI, w których nie można zainstalować UV. Jeśli utkniesz w agencie Jenkins z 2019 r. bez dostępu do powłoki, trudności związane z instalacją UV mogą przeważyć nad zwiększeniem szybkości. Każdy nowoczesny system CI (GitHub Actions, GitLab CI, CircleCI, BuildKite) posiada jednoliniowy instalator uv.
2. Środowiska z przerwą powietrzną z zablokowanym lustrem `pip`. uv domyślnie korzysta z PyPI, ale obsługuje --index-url — to zwykle działa, ale niektóre korporacyjne serwery lustrzane mają subtelne zachowania (nagłówki uwierzytelniania, JSON API vs Simple API), które uv obsługuje inaczej. Przetestuj zanim zatwierdzisz.
To wszystko. W każdym innym przypadku w 2026 r. — programiści solo, projekty zespołowe, open source, CI, Docker — uv jest szybsze, bardziej niezawodne i wymaga mniej wysiłku umysłowego niż klasyczny stos.
30-sekundowa zamiana CI
Przed (działania GitHub):
YAML- uses: actions/setup-python@v5 with: python-version: '3.13' - run: pip install -r requirements.txt - run: pytest
Po:
YAML- uses: astral-sh/setup-uv@v3 - run: uv sync - run: uv run pytest
Liczba uruchomień CI spada z ~2 min do ~15 sekund na etapie instalacji. Jeśli Twoja matryca testowa działa 5 razy na PR, jest to prawdziwa skumulowana oszczędność.
uv to rzadkie narzędzie, które jest zarówno szybsze ORAZ prostsze niż to, co zastępuje. Jeśli w 2026 roku będziesz zarabiać na życie w Pythonie, poświęć 10 minut na zmianę jednego projektu. Nawyk będzie przenoszony na każdy nowy projekt, którego dotkniesz.
Następny krok: ścieżka Python DevOps obejmuje tematykę UV, Ruff, Docker i nowoczesny stos wdrożeniowy Pythona — 104 interaktywne lekcje.