A modulis yra vienas .py failas; a paketas yra modulių direktorija. Importai leidžia naudoti kodą iš kitų modulių, organizuodami programą į pakartotinai naudojamus gabalus.
Moduliai ir importavimas
(): 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
__init__.py failas žymi direktoriją kaip paketą (ir gali vykdyti paketo inicijalizacijos kodą arba apibrėžti, ką from package import * atidaro).
if __name__ == "__main__" idiomadef main():
print("running as a script")
if __name__ == "__main__": # True only when run directly, not when imported
main()
Tai leidžia failui veikti tiek kaip importuojamas modulis ir kaip vykdomas scenarijus — kodas po juo veikia tik tada, kai failas vykdomas tiesiogiai (python file.py), o ne kai importuojamas. Beveik universali Python idioma.
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
Moduliai ir paketai yra tai, kaip organizuojate Python kodą į pakartotinai naudojamus, lengvai prižiūrimus vienetus, o ne į vieną milžinišką failą — tai yra pagrindinis bet kuriam ne trivialiam projektui.
Importo stilių, paketo struktūros (__init__.py), if __name__ == "__main__" idiomo (dvigubas scenarijaus/modulio elgesys) ir to, kaip Python ieško modulių (sys.path), supratimas yra būtinas projektų struktūrizavimui, kodo pakartotiniam naudojimui ir standartinės bibliotekos bei PyPI ekosistemos naudojimui.
Importo klaidos ir struktūros painiava yra įprasti ankstyvieji sutrikimai, kuriuos šis žinojimas išsprendžia.