Balíčky
Co jsou to balíčky
Moduly je možné v Pythonu združovat do balíčků (packages). Balíček
je adresář se soubory Pythonu (moduly).
Balíčky a moduly v balíčcích se importují podobně jako moduly (příkazem
import
). Aby Python považoval adresář za balíček, musí
být v adresáři soubor __init__.py
.
Soubor může být i prázný, aby to všechno fungovalo, ale je i pár
věcí, které se do něj dají zapsat (viz dále).
Struktura balíčků může vypadat třeba takto (převzato z oficiálního tutoriálu Pythonu):
sound/ Top-level package __init__.py Initialize the sound package formats/ Subpackage for file format conversions __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ Subpackage for sound effects __init__.py echo.py surround.py reverse.py ... filters/ Subpackage for filters __init__.py equalizer.py vocoder.py karaoke.py ...
Import balíčků
Aby šlo balíčky naimportovat, musí být adresáře v cestě os.path
.
import sounds.effects.echo
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
# jiný způsob importu a použití balíčku
from sounds.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)
# import jedné funkce a její použití
from sounds.effects.echo import echofilter
echofilter(input, output, delay=0.7, atten=4)
Moduly uvnitř balíčků se mohou na jiné moduly uvnitř stejnýcg balíčků odkazovat relativní cestou. Tečka označuje aktuální balíček a dvě tečky nadřazený.
from . import echo
from .. import formats
from ..filters import equalizer
Soubor __init__.py
Soubor __init__.py
musí být v každém adresáři,
který má být Pythonem chápán jako balíček (stačí i prázdný soubor).
V tomto souboru může být definována seznam __all__
,
která určuje, jaké moduly se načtou importem from package import *
.
Pouze moduly vyjmenované v __all__
jsou importovány příkazem
from … import *
.
__all__ = ["echo", "surround", "reverse"]
Pokud není v __init__.py
__all__
definováno,
je nahrán pouze balíček (a případně vše, co je definováno v __init__.py
).
Při prvním importu balíčku se provádí kód v __init__.py
. Proto se
do __init__.py
často píše inicializační kód balíčku (kam taky jinam).
Pokud vás nenapadá, co byste do __init__.py
psali za kód, tak tam
nic nepište :-).