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
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..