W tym artykule nauczysz się dzielić bazę kodu na czyste, wydajne moduły przy użyciu pakietów Pythona. Nauczysz się także importować i używać własnych lub zewnętrznych pakietów w programie w języku Python.
Wideo: Python Packages: Uporządkuj swój kod
Co to są paczki?
Zwykle nie przechowujemy wszystkich naszych plików na naszym komputerze w tej samej lokalizacji. Używamy dobrze zorganizowanej hierarchii katalogów dla łatwiejszego dostępu.
Podobne pliki są przechowywane w tym samym katalogu, na przykład możemy przechowywać wszystkie utwory w katalogu „ muzyka ”. Analogicznie do tego, Python ma pakiety dla katalogów i moduły dla plików.
W miarę jak nasza aplikacja powiększa się o wiele modułów, umieszczamy podobne moduły w jednym pakiecie, a różne moduły w różnych pakietach. To sprawia, że projekt (program) jest łatwy w zarządzaniu i koncepcyjnie przejrzysty.
Podobnie, ponieważ katalog może zawierać podkatalogi i pliki, pakiet Pythona może zawierać pakiety podrzędne i moduły.
Katalog musi zawierać plik o nazwie __init__.py
, aby Python mógł uznać go za pakiet. Ten plik może pozostać pusty, ale generalnie umieszczamy kod inicjujący dla tego pakietu w tym pliku.
Oto przykład. Załóżmy, że tworzymy grę. Jedna z możliwych organizacji pakietów i modułów mogłaby wyglądać tak, jak pokazano na poniższym rysunku.

Importowanie modułu z pakietu
Możemy importować moduły z pakietów za pomocą operatora kropki (.).
Na przykład, jeśli chcemy zaimportować start
moduł z powyższego przykładu, można to zrobić w następujący sposób:
import Game.Level.start
Teraz, jeśli ten moduł zawiera funkcję o nazwie select_difficulty()
, musimy użyć pełnej nazwy, aby się do niej odwołać.
Game.Level.start.select_difficulty(2)
Jeśli ta konstrukcja wydaje się długa, możemy zaimportować moduł bez prefiksu pakietu w następujący sposób:
from Game.Level import start
Możemy teraz wywołać tę funkcję w następujący sposób:
start.select_difficulty(2)
Innym sposobem importowania tylko wymaganej funkcji (lub klasy lub zmiennej) z modułu w pakiecie byłby następujący:
from Game.Level.start import select_difficulty
Teraz możemy bezpośrednio wywołać tę funkcję.
select_difficulty(2)
Chociaż łatwiejsza, ta metoda nie jest zalecana. Korzystanie z pełnej przestrzeni nazw pozwala uniknąć nieporozumień i zapobiega kolizji dwóch takich samych nazw identyfikatorów.
Podczas importu pakietów Python patrzy na listę katalogów zdefiniowanych w programie sys.path
, podobnie jak w przypadku ścieżki wyszukiwania modułów.