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 balíčku a použití funkce z balíčku
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ý.

# příklady použití relativních cest v modulu soudnd/effects/surround.py
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 *.

# obsah __init__.py v sound/effects/
__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 :-).

Komentář Hlášení chyby
Created: 11.9.2005
Last updated: 31.8.2015