Představte si náročný úkol vyvíjet složitou aplikaci s omezením na jediný soubor v Pythonu. Ačkoliv je to technicky možné, odporuje to klíčovým zásadám vytváření efektivního, udržovatelného a opakovaně použitelného softwaru. Právě z těchto důvodů jsou balíčky a moduly zcela nezbytné pro vývoj a růst softwarových projektů.
Co je to balíček?
V Pythonu balíček představuje mechanismus pro uspořádání logicky souvisejících modulů a zdrojů do jedné struktury. Je to v podstatě adresář, který v sobě sdružuje více Python modulů, podbalíčků a dalších souborů s kódem.
Balíčky vytváří hierarchickou strukturu, která umožňuje organizovat kód vašeho projektu na různých úrovních abstrakce, což usnadňuje jeho správu a rozšiřování.
Rozdíl mezi balíčky a moduly
Ačkoliv oba, balíčky i moduly, slouží k uspořádání kódu, existují mezi nimi určité rozdíly:
- Modul: Modul je soubor obsahující kód napsaný v Pythonu. Definuje funkce, třídy, proměnné a další objekty, které můžete importovat a využívat ve svém kódu.
- Balíček: Balíček je sbírka jednoho nebo více modulů a může také obsahovat podbalíčky. Představuje tedy vyšší úroveň organizace kódu.
Jak vytvořit balíček v Pythonu
Pro vytvoření balíčku postupujte podle následujících kroků.
Krok 1: Vytvoření adresáře projektu
Začněte založením adresáře, který bude obsahovat váš projekt.
study_bud/
Krok 2: Vytvoření adresáře balíčku
Uvnitř adresáře projektu vytvořte další adresář, který bude sloužit jako adresář vašeho balíčku. Zvolte pro něj výstižné jméno, které bude odrážet účel nebo funkčnost balíčku. Tento adresář bude obsahovat moduly a případné podbalíčky, které se k vašemu balíčku vztahují.
study_bud/ math_tool/
Krok 3: Definování souboru __init__.py
V adresáři balíčku vytvořte soubor s názvem `__init__.py`. Právě přítomnost tohoto souboru v adresáři z něj činí balíček v Pythonu.
Pokud je nutné inicializovat kód při každém použití balíčku, vložte jej do souboru `__init__.py`, jinak může zůstat prázdný.
study_bud/ math_tool/ __init__.py
Krok 4: Přidání modulů do balíčku
Do adresáře balíčku přidejte Python moduly (soubory s příponou `.py`), které definují funkce, třídy nebo proměnné.
Tyto moduly obsahují samotný kód, který poskytuje funkcionalitu vašeho balíčku. V adresáři balíčku můžete vytvořit i více modulů.
study_bud/ math_tool/ __init__.py operations.py statistics.py
Krok 5: Přidání podbalíčků do balíčku
Pokud váš balíček vyžaduje hierarchickou strukturu, nebo obsahuje rozdílné funkcionality, můžete uvnitř adresáře balíčku vytvářet podbalíčky.
Podbalíček je v podstatě další adresář s balíčkem uvnitř hlavního adresáře balíčku. Každý podbalíček by měl mít svůj vlastní soubor `__init__.py`. Podbalíčky umožňují další organizaci a oddělení kódu.
study_bud/ math_tool/ __init__.py operations.py statistics.py geometry/ __init__.py shapes.py calculus/ __init__.py integrations.py
V těchto krocích jste vytvořili balíček `math_tool`, přidali dva moduly (`operations.py` a `statistics.py`) a dva podbalíčky `geometry` a `calculus`, z nichž každý má své moduly.
Díky těmto krokům můžete snadno uspořádat související funkce pomocí balíčků a podbalíčků, což usnadňuje správu a opětovné použití vašeho kódu.
Jak pracovat s balíčkem v Pythonu
Pro práci s balíčkem je nutné jej nejprve importovat. Klíčová slova `import` a `from` vám umožňují importovat a používat balíček ve vašem kódu.
import math_tool
Tečkovou notaci můžete využít i pro import modulů, podbalíčků nebo specifických vlastností z balíčku. Tečková notace umožňuje procházet adresářovou strukturu balíčku. Díky tomu jsou vaše importy čitelnější a lépe se udržují.
from math_tool.operations import add, multiply
Ve výše uvedeném kódu jste pomocí tečkové notace přešli z adresáře balíčku (`math_tool`) do modulu `operations` a importovali dvě funkce (`add` a `multiply`).
Absolutní vs. Relativní Importy
U absolutních importů definujete kompletní cestu z balíčku nejvyšší úrovně (kořenového balíčku) k požadovanému modulu nebo podbalíčku. Toto je nejčastější a doporučený způsob importování modulů a balíčků v Pythonu.
from math_tool.geometry.shapes import parallelogram
Začínáte v kořenovém balíčku `math_tool`, postupně přejdete do podbalíčku `geometry`, najdete modul `shapes.py` a importujete funkci `parallelogram`.
Relativní importy, naopak, umožňují importování relativně k aktuálnímu umístění modulu. Používají tečkovou notaci pro určení relativních cest.
Například v modulu `calculus/integrations.py` můžete použít relativní import pro import funkce z modulu `shapes.py` v podbalíčku `geometry`.
from ..geometry.shapes import rhombus
Dvojtečka (`..`) říká Pythonu, aby:
- Začal v adresáři podbalíčku (`calculus`), kde se modul (`integrations.py`) nachází.
- Přešel o jeden adresář výše do nadřazeného adresáře balíčku (`math_tool`).
- V tomto nadřazeném adresáři našel podbalíček `geometry`.
- Přešel do modulu `shapes.py` a importoval z něj `rhombus`.
Tečková notace tedy reprezentuje počet adresářů, o které se má přesunout z aktuálního adresáře modulu.
Alias Imports pro Pohodlí
Importům můžete přiřadit alias, což usnadní jejich použití v kódu. Aliasy jsou užitečné při práci s dlouhými názvy balíčků nebo modulů.
Pro přiřazení aliasu použijte klíčové slovo `as`.
import math_tool.calculus as cal
Jak distribuovat svůj balíček v Pythonu
Python nabízí nástroje a platformy pro tvorbu a distribuci vašich balíčků. Distribuce balíčku vám umožňuje sdílet kód s dalšími vývojáři, podporovat spolupráci, usnadnit instalaci pro uživatele a přispívat do širší Python komunity.
Krok 1: Vytvoření účtu na PyPI
Python Package Index (PyPI) je výchozí úložiště pro balíčky Pythonu. Své balíčky můžete publikovat na PyPI, aby je ostatní vývojáři snadno našli a nainstalovali.
Nezapomeňte si uschovat uživatelské jméno a heslo, protože je budete potřebovat pro ověření při nahrávání balíčku na PyPI.
Krok 2: Instalace nástrojů pro správu balíčků
Tyto nástroje zjednoduší konfiguraci, sestavení a odeslání balíčku pomocí jediného příkazu.
pip install build wheel twine
Krok 3: Vytvoření souboru `setup.py`
Pro distribuci balíčku vytvořte soubor `setup.py` v kořenovém adresáři projektu. Soubor `setup.py` obsahuje metadata o vašem balíčku, jako je jeho název, verze, autor, popis, závislosti a další.
Nástroje pro správu balíčků využijí soubor `setup.py` ke konfiguraci a sestavení balíčku.
from setuptools import setup, find_packages setup( name="<název_balíčku>", version='1.0.0', author="<Vaše_Jméno>", description='Sbírka užitečných matematických funkcí', packages=find_packages(), install_requires=[ 'numpy', 'scipy', ], )
Krok 4: Sestavení balíčku
Jakmile je soubor `setup.py` připraven, můžete jej použít pro vygenerování distribuovatelného balíčku. V terminálu nebo příkazovém řádku přejděte do adresáře obsahujícího soubor `setup.py` a spusťte následující příkaz:
python setup.py sdist bdist_wheel
Tento příkaz vygeneruje adresář `dist` obsahující zdrojový distribuční balíček (`.tar.gz`) a balíček kola (`.whl`). Zobrazí se také adresář `build` a další informace.
Krok 5: Nahrání balíčku na PyPI
Když je váš balíček připraven, můžete jej nahrát na PyPI.
Spusťte následující příkaz:
twine upload dist/* > Uploading distributions to https://upload.pypi.org/legacy/ > Enter your username: ********** > Enter your password: **********
Navštivte stránku PyPI pro správu projektů, kde uvidíte svůj balíček.
Nyní jej mohou i ostatní vývojáři lokálně nainstalovat a používat, pokud shledají váš balíček užitečným.
Jak nainstalovat Python balíček
Správci balíčků jako `pip` usnadňují instalaci a správu balíčků Python z různých zdrojů, včetně Python Package Index (PyPI). Pro instalaci balíčku pomocí `pip` otevřete terminál nebo příkazový řádek a použijte následující příkaz:
pip install <název_balíčku>
Pro zobrazení všech dostupných příkazů a možností pro `pip` použijte volbu `–help`.
Psaní přehledných modulů
Balíčky obsahují moduly a podbalíčky, které zase obsahují další moduly. Je dobrým zvykem modularizovat svůj kód, zejména při práci na větších projektech. To vede k lepší organizaci kódu a jeho čitelnosti. Při vývoji v Pythonu je tedy klíčové psát moduly srozumitelně.