74 Moduli i paketidatoteka ne postoji u niti jednom imeniku (folderu) u sys.path, onda interpreter provjerava da li imeodgovara imenu nekog ugraženog modula. Ako ni ono ne postoji, onda se podiºe ImportError iznimka.Compilacija datoteka u .pyc i .pyo datoteke dogaža se samo u sprezi s naredbom import. Programiizvedeni preko naredbene linije ili preko standardnog ulaza ne proizvode takve datoteke. Naredbaimport u traºenju datoteka razlikuje mala i velika slova u njihovom imenu. Kod operacijskih sustavakoji ne podrºavaju tu razliku, potrebno je o tomu voditi ra£una.8.1.3 Ponovno punjenje modulaUgražena funkcija reload() koristi se za ponovno punjenje i izvr²avanje kôda sadrºanog unutar modulakoji je prethodno u£itan s naredbom import. Ona prima objekt modula kao pojedina£ni argument. Naprimjer:import primjer... neki kôd ...reload(primjer)# Ponovno puni modul 'primjer'Sve operacije uklju£ene u modul ¢e se nakon izvoženja naredbe reload() izvesti iz novo u£itanogkôda. Mežutim, reload() ne¢e retroaktivno obnoviti objekte koji su nastali iz starog modula. To zna£ida je mogu¢e istodobno postojanje referenci na objekte i u staroj i u novoj verziji modula. Nadalje,compilirane ekstenzije pisane u C ili C++ ne mogu se ponovono puniti naredbom reload(). Kaoop¢e pravilo, treba izbjegavati ponovno punjenje modula, osim za vrijeme razvitka programa i traºenjapogre²ki u njemu.8.2 PaketiPaketi dopu²taju da se vi²e modula skupi zajedno pod jednim zajedni£kim imenom. Ova tehnikapomaºe u razlu£ivanju sukoba u prostoru imena modula koji se koriste u razli£itim primjenama. Paketse denira stvaranjem imenika, foldera (engl. directory, folder) s istim imenom kao paket i stvaranjem__init__.py datoteke u tom imeniku. Mogu¢e je nakon toga dodavati druge izvorne datoteke (tekstovnedatoteke s <strong>Python</strong> kôdom), compilirana pro²irenja ili podpakete u istom imeniku. Na primjer, paket semoºe ovako organizirati:Graphics/__init__.pyPrimitive/__init__.pylinije.pyispuna.pytekstovi.py...Graph2d/__init__.pyplot2d.py...Graph3d/__init__.pyplot3d.py...Formati/__init__.pygif.pypng.py
8.2. Paketi 75tiff.pyjpeg.pyNaredba import koristi se za punjenje modula iz paketa na nekoliko na£ina:import Graphics.Primitive.ispunaOvo u£itava podmodul Graphics.Primitive.ispuna. Sadrºaj tog modula mora se eksplicitnoimenovati, kao na primjer: Graphics.Primitive.ispune.crtaj(img,x,y,color).Drugi na£in:from Graphics.Primitive import ispunau£itava podmodul ispuna i £ini ga raspoloºivim i bez paketnog preksa, na primjer: ispuna.crtaj(img,x,y,color).Tre¢i na£in:from Graphics.Primitive.ispuna import crtajOva naredba u£itava podmodul ispuna i £ini crtaj funkciju direktno primjenljivom, primjerice:crtaj(img,x,y,color). Kad god se neki dio paketa u£ita, importira, kôd u datoteci __init__.py setad izvr²i. U najmanjem slu£aju ova datoteka moºe biti i prazna, ali takožer moºe sadrºavati kôd kojimse izvode inicijalizacije koje su speci£ne za paket. Sve nažene datoteke u __init__.py za vrijemeu£itavanja, automatski se izvr²avaju. Tako ¢e naredba import Graphics.Primitive.ispuna izvr²iti__init__.py datoteke i u Graphics imeniku i u Primitive imeniku.Jedan poseban problem s paketima je obradba ovakve naredbe:from Graphics.Primitive import *šeljeni cilj ove naredbe je u£itati sve module pridruºene u paketu s trenuta£nim prostorom imena.Mežutim, s obzirom da dogovori oko imena datoteka (pogotovo u smislu razlikovanja velikih i malihslova) variraju od sustava do sustava, <strong>Python</strong> ne moºe to£no odrediti koje module to£no treba uklju£iti.Kao rezultat, ova naredba samo u£itava sve reference koje su denirane u __init__.py datoteci uPrimitive imeniku. Ovo se pona²anje moºe promijeniti deniranjem liste __all__ koja sadrºi svaimena modula pridruºena s paketom.Takva lista treba biti denirana unutar paketa u __init__.py datoteci, kao na primjer:# Graphics/Primitive/__init__.py__all__ = ["linije", "tekstovi", "ispuna",...]Ako korisnik pokrene naredbu from Graphics.Primitive import * onda se svi navedeni podmoduliu£itaju, kako se i o£ekuje. U£itavanje samo imena paketa ne¢e automatski u£itati sve podmodulekoji se nalaze u paketu. Na primjer, sljede¢i kôd ne¢e raditi:import GraphicsGraphics.Primitive.fill.floodfill(img,x,y,color)# Pogre²no!Mežutim, budu¢i da importGraphics naredba izvr²ava __init__.py datoteku u Graphics imeniku,mogu¢e ju je promijeniti tako da se automatski u£itaju svi podmoduli:# Graphics/__init__.pyimport Primitive, Graph2d, Graph3d# Graphics/Primitive/__init__.pyimport linije, tekstovi, ispuna ...