216 lines
4.5 KiB
Markdown
216 lines
4.5 KiB
Markdown
# Przewodnik po uv
|
|
|
|
## Czym jest uv?
|
|
|
|
[uv](https://docs.astral.sh/uv/) to niezwykle szybki menedżer pakietów i środowisk Pythona, napisany w Rust przez Astral (twórców Ruff). Jest on **10-100x szybszy** od pip i pip-tools.
|
|
|
|
## Instalacja uv
|
|
|
|
### Linux/macOS:
|
|
```bash
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
```
|
|
|
|
### Przez pip:
|
|
```bash
|
|
pip install uv
|
|
```
|
|
|
|
### Sprawdź instalację:
|
|
```bash
|
|
uv --version
|
|
```
|
|
|
|
## ⚠️ Ważne: Flaga --no-project w projekcie Izochrona
|
|
|
|
W tym projekcie używamy `uv run --no-project` zamiast `uv run`:
|
|
|
|
```bash
|
|
# Zamiast: uv run app.py
|
|
uv run --no-project app.py
|
|
```
|
|
|
|
**Dlaczego?**
|
|
- Projekt Izochrona nie jest pakietem Pythona przeznaczonym do instalacji
|
|
- `--no-project` mówi uv aby **nie próbował instalować** projektu jako editable package
|
|
- Tylko uruchamiamy skrypty, korzystając ze środowiska wirtualnego i zainstalowanych zależności
|
|
|
|
**Bez `--no-project`:** uv próbuje zbudować i zainstalować cały projekt używając `pyproject.toml`, co może powodować błędy.
|
|
|
|
## Podstawowe komendy
|
|
|
|
### Tworzenie środowiska wirtualnego:
|
|
```bash
|
|
cd backend
|
|
uv venv
|
|
```
|
|
|
|
### Instalacja zależności:
|
|
```bash
|
|
# Z requirements.txt
|
|
uv pip install -r requirements.txt
|
|
|
|
# Z pyproject.toml (w katalogu głównym projektu)
|
|
uv sync
|
|
|
|
# Pojedynczy pakiet
|
|
uv pip install flask
|
|
```
|
|
|
|
### Uruchamianie skryptów:
|
|
```bash
|
|
# uv automatycznie używa środowiska wirtualnego
|
|
uv run --no-project app.py
|
|
uv run --no-project download_gtfs.py
|
|
|
|
# Lub z katalogu głównego
|
|
uv run --no-project backend/app.py
|
|
```
|
|
|
|
### Aktualizacja pakietów:
|
|
```bash
|
|
uv pip install --upgrade flask
|
|
uv pip install --upgrade -r requirements.txt
|
|
```
|
|
|
|
### Lista zainstalowanych pakietów:
|
|
```bash
|
|
uv pip list
|
|
uv pip freeze
|
|
```
|
|
|
|
## Dlaczego uv?
|
|
|
|
### Szybkość:
|
|
- **Instalacja pakietów**: 10-100x szybsza niż pip
|
|
- **Rozwiązywanie zależności**: bardzo szybkie
|
|
- **Cache**: globalny cache pakietów (oszczędność miejsca)
|
|
|
|
### Wygoda:
|
|
- **Automatyczna aktywacja venv**: `uv run` automatycznie używa środowiska
|
|
- **Brak `source venv/bin/activate`**: nie musisz ręcznie aktywować środowiska
|
|
- **Kompatybilność z pip**: używa tych samych formatów (requirements.txt, pyproject.toml)
|
|
|
|
### Przykład - porównanie:
|
|
|
|
**Tradycyjnie (pip):**
|
|
```bash
|
|
python -m venv venv
|
|
source venv/bin/activate
|
|
pip install -r requirements.txt # ~30-60s
|
|
python app.py
|
|
```
|
|
|
|
**Z uv:**
|
|
```bash
|
|
uv venv
|
|
uv pip install -r requirements.txt # ~2-5s
|
|
uv run --no-project app.py
|
|
```
|
|
|
|
## Użycie w projekcie Izochrona
|
|
|
|
### Pierwsze uruchomienie:
|
|
```bash
|
|
./setup.sh # Używa uv
|
|
```
|
|
|
|
### Codzienne użycie:
|
|
```bash
|
|
# Uruchomienie serwera
|
|
./run.sh # lub: uv run --no-project backend/app.py
|
|
|
|
# Pobranie danych
|
|
uv run --no-project backend/download_gtfs.py
|
|
|
|
# Przykłady API
|
|
uv run --no-project examples/api_examples.py
|
|
```
|
|
|
|
### Dodawanie nowych pakietów:
|
|
|
|
**Opcja A** - requirements.txt:
|
|
```bash
|
|
cd backend
|
|
echo "matplotlib>=3.8.0" >> requirements.txt
|
|
uv pip install -r requirements.txt
|
|
```
|
|
|
|
**Opcja B** - pyproject.toml (zalecane):
|
|
```bash
|
|
# Edytuj pyproject.toml, dodaj do dependencies:
|
|
# "matplotlib>=3.8.0",
|
|
|
|
# Następnie:
|
|
uv sync
|
|
```
|
|
|
|
## Porady
|
|
|
|
### 1. Nie musisz aktywować środowiska:
|
|
```bash
|
|
# Zamiast:
|
|
source venv/bin/activate
|
|
python app.py
|
|
|
|
# Użyj:
|
|
uv run --no-project app.py
|
|
```
|
|
|
|
### 2. Global cache:
|
|
uv przechowuje pakiety globalnie, więc instalacja w nowych projektach jest ultra-szybka.
|
|
|
|
### 3. Lock file (opcjonalnie):
|
|
```bash
|
|
uv pip compile requirements.txt -o requirements.lock
|
|
uv pip sync requirements.lock # Deterministyczna instalacja
|
|
```
|
|
|
|
### 4. Różne wersje Pythona:
|
|
```bash
|
|
# uv może zarządzać wersjami Pythona
|
|
uv python install 3.11
|
|
uv venv --python 3.11
|
|
```
|
|
|
|
## Migracja z pip do uv
|
|
|
|
Jeśli masz istniejący projekt z pip:
|
|
|
|
```bash
|
|
# 1. Usuń stare venv (opcjonalnie)
|
|
rm -rf venv/
|
|
|
|
# 2. Stwórz nowe z uv
|
|
uv venv
|
|
|
|
# 3. Zainstaluj zależności
|
|
uv pip install -r requirements.txt
|
|
|
|
# 4. Gotowe! Używaj uv run zamiast python
|
|
uv run --no-project app.py
|
|
```
|
|
|
|
## Zasoby
|
|
|
|
- Dokumentacja: https://docs.astral.sh/uv/
|
|
- GitHub: https://github.com/astral-sh/uv
|
|
- Blog: https://astral.sh/blog
|
|
|
|
## FAQ
|
|
|
|
**Q: Czy uv jest kompatybilne z pip?**
|
|
A: Tak! uv używa tych samych formatów (requirements.txt, pyproject.toml, wheel).
|
|
|
|
**Q: Czy mogę używać uv i pip jednocześnie?**
|
|
A: Technicznie tak, ale nie jest to zalecane. Wybierz jedno.
|
|
|
|
**Q: Co jeśli pakiet nie działa z uv?**
|
|
A: Bardzo rzadki przypadek. Zawsze możesz wrócić do pip w konkretnym środowisku.
|
|
|
|
**Q: Czy uv obsługuje editable installs?**
|
|
A: Tak! `uv pip install -e .`
|
|
|
|
**Q: Gdzie jest cache pakietów?**
|
|
A: `~/.cache/uv/` (Linux/macOS) lub `%LOCALAPPDATA%\uv\cache` (Windows)
|