Modul je pojedinačna .py datoteka; paket je direktorij modula. Uvoz vam omogućava korištenje koda iz drugih modula, organizirajući program u ponovno iskoristive dijelove.
Moduli i uvoz
(): a + b
PI =
# main.py — different ways to import
import math_utils # import the whole module
math_utils.add(2, 3) # access via the module name
from math_utils import add, PI # import specific names
add(2, 3) # use directly
from math_utils import add as plus # import with an alias
import numpy as np # common aliasing convention
mypackage/
__init__.py ← marks it as a package (can be empty)
module_a.py
subpackage/
__init__.py
module_b.py
from mypackage.module_a import something
from mypackage.subpackage.module_b import other
Datoteka __init__.py označava direktorij kao paket (i može pokrenuti kod za inicijalizaciju paketa ili definirati što from package import * izlaže).
if __name__ == "__main__"def main():
print("running as a script")
if __name__ == "__main__": # True only when run directly, not when imported
main()
Ovo omogućava datoteci da funkcionira kao uvozni modul i izvršivi skriptu — kod ispod njega se pokreće samo kada se datoteka izvršava izravno (python file.py), a ne kada se uvozi. Gotovo univerzalni Python idiom.
import sys
sys.path # the list of directories Python searches for imports
# includes: the current directory, installed packages (site-packages), stdlib
import os, json, datetime # standard library — "batteries included"
import requests # third-party — installed via pip from PyPI
Moduli i paketi su način na koji organizirate Python kod u ponovno iskoristive, održive jedinice umjesto jedne ogromne datoteke — temelj bilo kojeg netrivijalnog projekta.
Razumijevanje stilova uvoza, strukture paketa (__init__.py), idioma if __name__ == "__main__" (双 ponašanja skripte/modula) i kako Python pronalazi module (sys.path) neophodno je za strukturiranje projekata, ponovno korištenje koda i korištenje ogromne standardne biblioteke i PyPI ekosustava.
Greške pri uvozu i zbrka u strukturi česta su početna prepreka koju ovo znanje razriješava.