Pythons `import`-sats: Moduler, namnutrymmen och bästa praxis
I Python är import hur du hämtar kod från en modul in i en annan. Det är inte "huvudimport" – det finns ingen sådan term i Python. Här är hur det faktiskt fungerar, med mönster du använder dagligen.
Grundläggande importsyntax
import modulnamn Detta laddar modulnamn och binder det till en variabel i ditt nuvarande namnutrymme. Du får tillgång till dess innehåll med punknotation:
import math math.sqrt(16) # 4.0 math.pi # 3.14159... Vanliga importmönster
1. Importera modul (Rekommenderat standard)
import pandas as pd import numpy as np df = pd.DataFrame({'a': [1,2,3]}) arr = np.array([1,2,3]) Fördelar: Explicit, läsbar, undviker namngivningskonflikter, visar ursprung.
2. Importera specifika namn
from math import sqrt, pi sqrt(16) # 4.0 – inget prefix behövs pi # 3.14159... Använd när: Du använder några namn tungt. Undvik: from modul import * (namnutrymmesförorening).
3. Importera med alias
import matplotlib.pyplot as plt import seaborn as sns Standardkonventioner (pd, np, plt, sns, tf, torch) gör koden omedelbart läsbar.
4. Villkorliga / Lata importer
# Importera tunga dependencies först när behövs def analyze_data(): import pandas as pd # Lokal import – snabbare startup om ej använd return pd.read_csv('data.csv') Hur import fungerar under huven
- Kolla
sys.modules– om redan laddad, returnera cachad modul - Hitta modul via
sys.path(aktuell katalog, PYTHONPATH, site-packages, stdlib) - Kör modulkod – kör toppnivå-satser (def, class, tilldelningar)
- Skapa modulobjekt – namnutrymme för modulens globala variabler
- Cacha i
sys.modules - Binda namn i importerarens namnutrymme (per import-sats)
Modulsökväg (sys.path)
import sys sys.path # ['', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', # '/home/user/.local/lib/python3.11/site-packages', ...] ''= nuvarande skripts katalog (eller CWD om interaktiv)- Installera paket:
pip install paket→ site-packages - Virtual environments isolerar
site-packages
Paket & Undermoduler
import paket.undermodul from paket import undermodul from paket.undermodul import funktion Katalog med __init__.py = paket. __init__.py kan exponera undermoduler:
# paket/__init__.py from .undermodul import offentlig_funktion __all__ = ['offentlig_funktion'] Vanliga fallgropar & lösningar
| Problem | Orsak | Lösning |
|---|---|---|
ModuleNotFoundError | Ej installerat / fel env / stavfel | pip install, kolla venv, kolla stavning |
ImportError: cannot import name | Cirkulär import / namn ej i modul | Restrukturera, flytta importer in i funktioner |
| Namnkonflikt | from x import * eller lokal fil skuggar stdlib | Döp inte filer math.py, random.py; använd explicita importer |
| Relativ import-fel | Kör modul som skript | Kör som python -m paket.modul eller använd absoluta importer |
|
© Resor
|
