Bir modül tek bir .py dosyasıdır; bir paket modüllerin bir dizinidir. İçe aktarmalar diğer modüllerden kod kullanmanıza izin verir, bir programı yeniden kullanılabilir parçalara düzenler.
Modüller ve içe aktarma
(): a + b
PI =
Bir modül tek bir .py dosyasıdır; bir paket modüllerin bir dizinidir. İçe aktarmalar diğer modüllerden kod kullanmanıza izin verir, bir programı yeniden kullanılabilir parçalara düzenler.
(): 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 dosyası bir dizini paket olarak işaretler (ve paket-init kodunu çalıştırabilir veya from package import * hangi öğeleri ortaya çıkardığını tanımlayabilir).
if __name__ == "__main__" deyimidef main():
print("running as a script")
if __name__ == "__main__": # True only when run directly, not when imported
main()
Bu, bir dosyanın hem içe aktarılabilir bir modül hem de çalıştırılabilir bir betik olarak davranmasına izin verir — altındaki kod yalnızca dosya doğrudan yürütüldüğünde (python file.py) çalışır, içe aktarıldığında değil. Neredeyse evrensel bir Python deyimi.
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
Modüller ve paketler, Python kodunu tek bir devasa dosya yerine yeniden kullanılabilir, bakımı yapılabilir birimler halinde düzenlemenin yoludur — herhangi bir önemsiz olmayan proje için temeldir.
İçe aktarma stillerini, paket yapısını (__init__.py), if __name__ == "__main__" deyimini (çift betik/modül davranışı) ve Python'un modülleri bulma şeklini (sys.path) anlamak, projeleri yapılandırmak, kodu yeniden kullanmak ve geniş standart kütüphane ile PyPI ekosistemini kullanmak için gereklidir.
İçe aktarma hataları ve yapı kargaşası, bu bilginin çözdüğü yaygın erken engeller.