Moduł to jeden plik .py; pakiet to katalog modułów. Importy pozwalają używać kodu z innych modułów, organizując program na wielokrotnie użyteczne elementy.
Dlaczego to ważne
(): 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
Plik __init__.py oznacza katalog jako pakiet (i może uruchomić kod inicjalizacji pakietu lub określić, co from package import * eksponuje).
if __name__ == "__main__"def main():
print("running as a script")
if __name__ == "__main__": # True only when run directly, not when imported
main()
Pozwala plikowi działać zarówno jako importowalny moduł i jako skrypt do uruchomienia — kod w nim uruchamia się tylko wtedy, gdy plik jest wykonywany bezpośrednio (python file.py), a nie gdy jest importowany. Niemal uniwersalny idiom Pythona.
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
Moduły i pakiety to sposób, w jaki organizujesz kod Pythona w wielokrotnie użyteczne, łatwe w utrzymaniu jednostki, a nie w jeden gigantyczny plik — fundamentalne dla każdego nietrywialnego projektu.
Zrozumienie stylów importu, struktury pakietu (__init__.py), idimu if __name__ == "__main__" (podwójna behavior skryptu/modułu) i sposobu, w jaki Python znajduje moduły (sys.path), jest niezbędne do strukturyzowania projektów, ponownego użytku kodu i korzystania z ogromnej biblioteki standardowej i ekosystemu PyPI.
Błędy importu i zamieszanie dotyczące struktury to powszechne początkowe przeszkody, które ta wiedza rozwiązuje.