U ovom ćete članku naučiti podijeliti bazu koda na čiste, učinkovite module pomoću Python paketa. Također, naučit ćete uvoziti i koristiti vlastite ili nezavisne pakete u svom programu Python.
Video: Python paketi: organizirajte svoj kôd
Što su paketi?
Obično ne pohranjujemo sve datoteke na računalu na istom mjestu. Za lakši pristup koristimo dobro organiziranu hijerarhiju direktorija.
Slične se datoteke čuvaju u istom direktoriju, na primjer, sve pjesme možemo zadržati u direktoriju " glazba ". Analogno ovome, Python ima pakete za direktorije i module za datoteke.
Kako naš aplikacijski program raste s puno modula, stavljamo slične module u jedan paket, a različite module u različite pakete. To projektom (programom) čini lako upravljanje i konceptualno jasnim.
Slično tome, kako direktorij može sadržavati poddirektorijume i datoteke, paket Python može imati podpakete i module.
Direktorij mora sadržavati datoteku imenovanu __init__.py
kako bi je Python mogao smatrati paketom. Ova datoteka može ostati prazna, ali u ovu datoteku obično stavljamo inicijalizacijski kod za taj paket.
Evo primjera. Pretpostavimo da razvijamo igru. Jedna od mogućih organizacija paketa i modula može biti kao što je prikazano na donjoj slici.
![](https://cdn.wiki-base.com/2810373/python_packages_how_to_create_and_import_them_.jpg.webp)
Uvoz modula iz paketa
Module možemo uvesti iz paketa pomoću operatora dot (.).
Na primjer, ako želimo uvesti start
modul u gornjem primjeru, to se može učiniti na sljedeći način:
import Game.Level.start
Sad, ako ovaj modul sadrži funkciju imenovanu select_difficulty()
, moramo upotrijebiti puno ime kako bismo je referencirali.
Game.Level.start.select_difficulty(2)
Ako se ova konstrukcija čini dugotrajnom, možemo uvesti modul bez prefiksa paketa na sljedeći način:
from Game.Level import start
Sada funkciju možemo nazvati jednostavno kako slijedi:
start.select_difficulty(2)
Drugi način uvoza samo potrebne funkcije (ili klase ili varijable) iz modula unutar paketa bio bi sljedeći:
from Game.Level.start import select_difficulty
Sada ovu funkciju možemo izravno pozvati.
select_difficulty(2)
Iako je lakša, ova metoda se ne preporučuje. Korištenje punog prostora imena izbjegava zbrku i sprječava sudaranje dva ista imena identifikatora.
Tijekom uvoza paketa, Python izgleda na popisu direktorija definiranih u sys.path
, slično kao i za put pretraživanja modula.