A Python programkódoknál van, amikor látni az if __name__ == ‘__main__’: kezdetű kódblokkot, de van amelyikben nem szerepel. Mi az oka ennek?
A választ ott kell keresni, hogy egy .py kiterjesztésű fájlba írt kódok két féle szerepben használhatók és futtathatók. Egyfelől be tudjuk importálni egy másik fájlban szereplő programkódba mint modul, másrészt önállóan is futtathatjuk. Ez utóbbi célja lehet például a modul tesztelése. Ilyenkor tesztkódokat helyezünk el a modulban, amelyeket a sikeres tesztek után sem biztos, hogy el akarunk távolítani, hiszen később is szükség lehet rájuk, illetve a modul használóját is segítheti majd a működés megértésében.
A gond az, hogy importáláskor is lefutnak ezek az extra kódok, ami viszont ilyenkor már nem kívánatos. A Python ezt úgy oldja meg, hogy a modul __name__ attribútumának értéke a modulfájl neve lesz, ha importálják a modult. Ha viszont önállóan futtatjuk a modult, akkor a __name__ értéke automatikusan a ‘__main__’ karakterlánc lesz. Ezt vizsgáljuk az if __name__ == ‘__main__’: szelekcióval, aminek a kódblokkja tehát csak akkor fog végrehajtódni, ha önállóan futtatjuk a kódfájlt. Ezért tesztelés esetén ide, ebbe a blokkba kell helyezni a tesztkódokat.
A __main__ azonban nem csak itt bukkanhat fel, hanem modulcsomagok esetében is.
Az általában ismert, hogy amikor egy csomag importálásra kerül, vagy abból importálunk, akkor a csomagban levő __init__.py kódsorai lefutnak egyszer. Ha ennek keretében például a csomag egy vagy több modulját importáljuk be, akkor ennek eredményeképpen a csomag névterébe bekerül az importált modulok neve. Ez azt jelenti, hogy a csomag beimportálása után a csomagobjektumon keresztül e modulok közvetlenül a neveikkel hozzáférhetők.
Az már talán kevésbé ismert, hogy csomagot nem csak beimportálni lehet, hanem futtatni is, amennyiben létrehozunk egy __main__.py nevű modult a csomagon belül. Ha a csomagot lefuttatjuk, akkor a __main__.py fájlban szereplő kódok fognak lefutni. Ez például a csomag tesztelésére használható.
Vagyis röviden összefoglalva: a csomag importálásakor az __init__.py fut le, futtatásakor a __main__.py.
A fentiek illusztrálására az alább látható szerkezetű, geometria nevű csomagot hozunk létre. Ebben egy-egy modul szolgál a 2D és 3D alakzatok modellezésére. Továbbá az __init__.py mellett létrehoztunk egy __main__.py fájlt is. Az egyes fájlok tartalma az ábrán látható. Az alakzatok2D és alakzatok3D modulokat önállóan teszteltük, amiket az ábra alján, a parancssori képek mutatnak. A geometria csomagot szintén teszteltük közvetlenül futtatva a csomagot. Ennek eredménye az ábra jobb oldalán a __main__.py kódja mellett látható.
A geometria csomagot egy matek.py programban használjuk fel, ezért ebbe beimportáljuk a csomagot. A matek.py futtatásakor először, az importálás hatására, a csomag __init__.py modulja fut le, majd pedig a matek.py többi kódja. Ezek eredményét szintén megtekinthetjük az ábra jobb felső sarkában.

A Python tudásépítés lépésről lépésre című e-könyvben a modulok és csomag létrehozásával, működésük részletkérdéseivel a „Panelprogram – modulok” fejezet foglalkozik.