koleo-izochrona/UV_GUIDE.md

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)