Moduuli on yksittäinen .py-tiedosto; paketti on moduulien sisältävä hakemisto. Importit mahdollistavat koodin käyttämisen muista moduuleista, organisoiden ohjelman uudelleenkäytettäviksi osiksi.
Moduulit ja importointi
(): a + b
PI =
Moduuli on yksittäinen .py-tiedosto; paketti on moduulien sisältävä hakemisto. Importit mahdollistavat koodin käyttämisen muista moduuleista, organisoiden ohjelman uudelleenkäytettäviksi osiksi.
(): 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
Tiedosto __init__.py merkitsee hakemiston paketiksi (ja voi suorittaa paketin alustuskoodia tai määrittää, mitä from package import * paljastaa).
if __name__ == "__main__" -idiomidef main():
print("running as a script")
if __name__ == "__main__": # True only when run directly, not when imported
main()
Tämä antaa tiedostolle kaksinaisen roolin — se voi olla sekä importoitava moduuli että suoritettava skripti. Tämän alla oleva koodi suoritetaan vain, kun tiedosto suoritetaan suoraan (python file.py), ei importoitaessa. Lähes universaali Python-idiomi.
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
Moduulit ja paketit ovat tapa organisoida Python-koodi uudelleenkäytettäviksi, ylläpidettäviksi osiksi yksittäisen jättiläistiedoston sijaan — tämä on peruslähtökohta millä tahansa ei-triviaaleilla projekteilla.
Impointtityylien ymmärtäminen, paketin rakenne (__init__.py), if __name__ == "__main__" -idiomi (kaksoisskripti/moduuli-käyttäytyminen) ja se, miten Python löytää moduulit (sys.path), on olennaista projektien rakentelussa, koodin uudelleenkäytössä ja laajan vakiokirjaston sekä PyPI-ekosysteemin käytössä.
Impointivirheet ja rakenteen sekaannus ovat yleisiä alkuperäisiä esteitä, jotka tämä tieto ratkaisee.