====== Python ====== ===== Návod: Izolovaná instalace Python projektů pomocí Virtual Environment ===== Když instaluješ Python balíčky globálně, hrozí, že ti: * Systém bude plný nepotřebných souborů * Může dojít ke konfliktům verzí mezi projekty * Těžko se pak zbavíš věcí, které už nepotřebuješ **Řešení**: Virtuální prostředí (Virtual Environment) – izolovaná složka pro každý projekt. ==== Co je Virtual Environment ==== Virtual Environment je jako samostatný "kontejner" pro Python balíčky. Všechno, co nainstalujete, zůstane v jedné složce a neovlivní zbytek systému. **Výhody:** * **Čistý systém** – nic se nenamontuje do `/usr/` nebo `~/.local/` * **Izolace** – každý projekt má své balíčky v samostatné složce * **Snadné smazání** – chceš projekt vymazat? Stačí smazat složku * **Bez konfliktů** – jeden projekt může mít Python 3.9, jiný 3.11, bez problémů * **Reprodukovatelnost** – stejný postup = stejný výsledek vždy ==== Krok za krokem: Nastavení projektu ==== === 1. Vytvoř složku pro projekt === mkdir ~/projekty/muj-projekt cd ~/projekty/muj-projekt Můžeš si zvolit jakékoli místo na disku. Doporučuji `~/projekty/` pro přehlednost. === 2. Vytvoř virtuální prostředí === python3 -m venv venv Tím se vytvoří složka `venv/` s úplně novým Python prostředím. Název `venv` je konvence, ale můžeš si zvolit jakýkoli název. === 3. Aktivuj virtuální prostředí === source venv/bin/activate Poznáš to podle příkazového řádku – měl by se ti objevit prefix `(venv)`: (venv) uživatel@počítač:~/projekty/muj-projekt$ === 4. Aktualizuj pip (správce balíčků) === pip install --upgrade pip === 5. Nainstaluj potřebné balíčky === pip install numpy pandas requests # nebo podle toho, co potřebuješ Všechny balíčky se nainstalují do `venv/lib/python3.x/site-packages/`. === 6. Deaktivuj prostředí (když skončíš) === deactivate Příkazový řádek se vrátí do normálního stavu. ---- ==== Čtení projektu po čase ==== Pokud se vrátíš k projektu později: cd ~/projekty/muj-projekt source venv/bin/activate # Teď můžeš pracovat jako dřív Virtuální prostředí si pamatuje, jaké balíčky byly nainstalovány. ---- ==== Užitečné příkazy ==== === Kontrola nainstalovaných balíčků === pip list Zobrazí všechny balíčky v aktivním virtuálním prostředí. === Kontrola velikosti virtuálního prostředí === du -sh venv/ Uvidíš, kolik místa zabírá složka `venv/`. === Úplné smazání projektu === cd ~/projekty/ rm -rf muj-projekt/ Tím zmizí všechno – projekt, kód, balíčky, všechno. Místo se uvolní. ---- ==== Stahování vs. instalace: Co se kde nachází ==== Když spustíš `pip install`, dějí se dvě věci: === 1. Stahování do cache (~500 MB – 2 GB) === ~/.cache/pip/ Pip si ukládá stažené balíčky do cache. Slouží to jako "paměť" – když nainstaluješ stejný balíček příště, pip ho vezme z cache namísto stažení ze sítě. **Obsah**: Komprimované `.whl` soubory (zipping balíčků). === 2. Instalace do projektu (~100 MB – 2 GB) === ~/projekty/muj-projekt/venv/lib/python3.x/site-packages/ Tady žijí rozpakované balíčky, které projekt skutečně používá. **Obsah**: Skutečný kód knihoven, které potřebuješ. ---- ==== Čištění cache a uvolnění místa ==== === Vyčisti pip cache === Cache si můžeš bezpečně vyčistit – nic se nerozbije: pip cache purge Nebo ručně: rm -rf ~/.cache/pip/ **Co se stane?** * ✅ Uvolníš 500 MB – 2 GB místa * ✅ Virtuální prostředí zůstane intaktní * ❌ Příští instalace bude pomalejší (pip musí stáhnout znovu) === Vyčisti komplexní projekt === Pokud máš více projektů a chceš uvolnit všechno: # 1. Smaž jednotlivé projekty rm -rf ~/projekty/projekt1/ rm -rf ~/projekty/projekt2/ # 2. Vyčisti cache pip cache purge ---- ==== Pokročilé: Uložení seznamu balíčků ==== Pokud chceš, aby si někdo jiný snadno zkopíroval tvůj projekt se stejnými verzemi: === Vytvoř seznam závislostí === pip freeze > requirements.txt Soubor `requirements.txt` obsahuje seznam všech balíčků a jejich verzí: numpy==1.24.3 pandas==2.0.2 requests==2.31.0 === Spolupracovník si projekt zkopíruje === git clone projekt cd projekt python3 -m venv venv source venv/bin/activate pip install -r requirements.txt Všechny balíčky v přesných verzích se nainstalují automaticky. ---- ==== Tipy a triky ==== === Aliasy pro usnadnění === Do souboru `~/.bashrc` nebo `~/.zshrc` si můžeš přidat aliasy: alias venv_on='source venv/bin/activate' alias venv_off='deactivate' alias venv_new='python3 -m venv venv && source venv/bin/activate' Pak stačí zadat: venv_on # aktivace venv_off # deaktivace === Kontrola, zda je prostředí aktivní === Pokud si nejsi jistý, zda je virtuální prostředí aktivní, podívej se na prompt: * **Aktivní**: `(venv) uživatel@počítač:...` * **Neaktivní**: `uživatel@počítač:...` === Více projektů vedle sebe === Můžeš mít tolik projektů, kolik chceš. Každý má své vlastní virtuální prostředí: ~/projekty/ ├── projekt1/ │ └── venv/ ├── projekt2/ │ └── venv/ └── projekt3/ └── venv/ Když přepínáš mezi projekty, aktivuj jejich prostředí: deactivate # vypni staré cd ~/projekty/projekt2 source venv/bin/activate # zapni nové ---- ==== Shrnutí: Checklist pro nový projekt ==== - ✅ `mkdir ~/projekty/novy-projekt && cd ~/projekty/novy-projekt` - ✅ `python3 -m venv venv` - ✅ `source venv/bin/activate` - ✅ `pip install --upgrade pip` - ✅ `pip install balicek1 balicek2 balicek3` - ✅ Pracuj na svém kódu - ✅ `deactivate` (když skončíš) **Pro smazání:** `rm -rf ~/projekty/novy-projekt/` ---- ==== Řešení problémů ==== **Otázka**: Co když si nejsem jistý, co je kde nainstalováno?\\ **Odpověď**: Spusť `pip list` v aktivním virtuálním prostředí. Vidíš jen balíčky toho konkrétního projektu. **Otázka**: Zabírá to hodně místa?\\ **Odpověď**: Typicky 100 MB – 2 GB na projekt, podle počtu balíčků. Všechno je ale v jedné složce a snadno se to smaže. **Otázka**: Mohu mít více verzí Pythonu?\\ **Odpověď**: Ano. Každé virtuální prostředí může být postaveno na jiné verzi Pythonu, pokud je máš nainstalovanou: python3.9 -m venv venv python3.11 -m venv venv ---- ===== Aktualizace balíků instalované pip ===== Dle [[https://www.root.cz/zpravicky/jak-aktualizovat-baliky-instalovane-pip/|tohoto článku]] je poněkud problém s aktualizací balíčků nainstalovaných pomocí Pip (package installer for Python). Je možné ručně vynutit aktualizaci explicitně vyjmenovaných balíčků, například: pip install --upgrade pip setuptools wheel Všechny nainstalované jednoduše ale nejde. Řešením je použití vlastního skriptu: pip freeze --user | cut -d'=' -f1 | xargs pip install --upgrade --user -U Anebo je možné použít například balíček [[https://pypi.org/project/pipupgrade/|pipupgrade]] či [[https://pypi.org/project/pip-review/|pip-review]]. V prvním případě se aktualizuje triviálně //pipugrade//, v druhém případě //pip-review --local --auto//. Nebo se nabízí plošná aktualizace pro nějaký projekt pomocí: python3 -m pip install -r requirements.txt