Resor       https://sv.bhlyqj.com

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

  1. Kolla sys.modules – om redan laddad, returnera cachad modul
  2. Hitta modul via sys.path (aktuell katalog, PYTHONPATH, site-packages, stdlib)
  3. Kör modulkod – kör toppnivå-satser (def, class, tilldelningar)
  4. Skapa modulobjekt – namnutrymme för modulens globala variabler
  5. Cacha i sys.modules
  6. 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

Bästa praxis

  1. Standardbibliotek först, sedan tredjeparts, sedan lokala – varje grupp alfabetiserad
  2. En import per rad (PEP 8)
  3. Använd import modul över from modul import *
  4. Alias: Använd community-standarder (pd, np, plt, tf, torch)
  5. Undvik körningstid sökvägsmanipulation – använd korrekt paketering (pyproject.toml, pip install -e .)
  6. Typkontroll: from __future__ import annotations + TYPE_CHECKING skydd

Exempel: Ren import-block

 # Standardbibliotek import json import os from pathlib import Path from typing import List, Optional # Tredjeparts import numpy as np import pandas as pd import requests # Lokala from mittprojekt.config import settings from mittprojekt.models import User from mittprojekt.utils import logger 

Pythons importsystem är kraftfullt, explicit och förutsägbart – när du förstår namnutrymmesmodellen. Gyllene regeln: gör det uppenbart varje namn kommer ifrån. Ditt framtida jag (och kollegor) kommer tacka dig.

ProblemOrsakLösning
ModuleNotFoundErrorEj installerat / fel env / stavfelpip install, kolla venv, kolla stavning
ImportError: cannot import nameCirkulär import / namn ej i modulRestrukturera, flytta importer in i funktioner
Namnkonfliktfrom x import * eller lokal fil skuggar stdlibDöp inte filer math.py, random.py; använd explicita importer
Relativ import-felKör modul som skriptKör som python -m paket.modul eller använd absoluta importer