Η Δήλωση `import` της Python: Μονάδες, Ονοματοχώροι & Best Practices

Στη Python, η import είναι ο τρόπος με τον οποίο φέρνετε κώδικα από μια μονάδα σε μια άλλη. Δεν είναι «main import» — αυτό δεν είναι όρος Python. Εδώ είναι πώς λειτουργεί πραγματικά, με τα μοτίβα που θα χρησιμοποιείτε καθημερινά.

Βασική Σύνταξη Import

import module_name 

Αυτό φορτώνει το module_name και το δέσμευσε σε μια μεταβλητή στον τρέχοντα ονοματοχώρο. Προσβάσετε στα περιεχόμενά του με σημειογραφία τελείας:

 import math math.sqrt(16) # 4.0 math.pi # 3.14159... 

Συνηθισμένα Μοτίβα Import

1. Import Module (Προτεινόμενο Default)

 import pandas as pd import numpy as np df = pd.DataFrame({'a': [1,2,3]}) arr = np.array([1,2,3]) 

Πλεονεκτήματα: Εξακριβωτικό, αναγνώσιμο, αποφεύγει συγκρούσεις ονομάτων, δείχνει προέλευση.

2. Import Συγκεκριμένων Ονομάτων

 from math import sqrt, pi sqrt(16) # 4.0 — καμία πρόθεμα απαιτείται pi # 3.14159... 

Χρησιμοποιήστε όταν: Χρησιμοποιείτε λίγα ονόματα έντονα. Αποφύγετε: from module import * (ρύπανση ονοματοχώρου).

3. Import με Ψευδώνυμο

 import matplotlib.pyplot as plt import seaborn as sns 

Σταθερές συμβάσεις (pd, np, plt, sns, tf, torch) κάνουν τον κώδικα άμεσα αναγνώσιμο.

4. Υποδεσμευμένα / Lazy Imports

 # Μόνο εισαγωγή βαρών deps όταν χρειάζονται def analyze_data(): import pandas as pd # Τοπική εισαγωγή — γρηγορότερη εκκίνηση αν δεν χρησιμοποιείται return pd.read_csv('data.csv') 

Πώς Λειτουργεί το Import Υπό την Καλύψη

  1. Έλεγχος sys.modules — αν ήδη φορτωμένο, επιστροφή cached module
  2. Εύρεση module μέσω sys.path (τρέχον dir, PYTHONPATH, site-packages, stdlib)
  3. Εκτέλεση κώδικα module — τρέχει top-level statements (def, class, αναθέσεις)
  4. Δημιουργία module object — ονοματοχώρος για globals του module
  5. Cache στο sys.modules
  6. Δέσμευση ονόματος στον ονοματοχώρο του importer (ανά import statement)

Διαδρομή Αναζήτησης Module (sys.path)

 import sys sys.path # ['', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', # '/home/user/.local/lib/python3.11/site-packages', ...] 
  • '' = τρέχον directory script (ή CWD αν interactive)
  • Εγκατάσταση πακέτων: pip install package → site-packages
  • Εικονικά περιβάλλοντα απομονώνουν site-packages

Πακέτα & Υπομονάδες

 import package.submodule from package import submodule from package.submodule import function 

Δirectory με __init__.py = πακέτο. Το __init__.py μπορεί να εκθέτει υπομονάδες:

 # package/__init__.py from .submodule import public_function __all__ = ['public_function'] 

Συνηθισμένα Προβλήματα & Λύσεις

ΠρόβλημαΑιτίαΔιόρθωση
ModuleNotFoundErrorΔεν εγκατεστημένο / λάθος env / typopip install, έλεγξτε venv, έλεγξτε spelling
ImportError: cannot import nameΚυκλικό import / όνομα δεν υπάρχει στο moduleΕπαναρρύθμιση, μετακίνηση imports μέσα σε functions
Σύγκρουση ονόματοςfrom x import * ή τοπικό αρχείο σκιάζει stdlibΜην ονομάζετε αρχεία math.py, random.py· χρησιμοποιήστε explicit imports
Relative import errorΕκτέλεση module ως scriptΤρέξτε ως python -m package.module ή χρησιμοποιήστε absolute imports

Best Practices

  1. Πρώτα standard library, μετά third-party, μετά local — κάθε ομάδα αλφαβητικά
  2. Ένα import ανά γραμμή (PEP 8)
  3. Χρησιμοποιήστε import module πάνω από from module import *
  4. Ψευδώνυμα: Χρησιμοποιήστε κοινότητες standards (pd, np, plt, tf, torch)
  5. Aποφύγετε runtime path manipulation — χρησιμοποιήστε σωστή συσκευασία (pyproject.toml, pip install -e .)
  6. Type checking: from __future__ import annotations + TYPE_CHECKING guards

Παράδειγμα: Καθαρό Import Block

 # Standard library import json import os from pathlib import Path from typing import List, Optional # Third-party import numpy as np import pandas as pd import requests # Local from myproject.config import settings from myproject.models import User from myproject.utils import logger 

Το σύστημα import της Python είναι ισχυρό, ρητό και προβλέψιμο — μόλις κατανοήσετε το μοντέλο ονοματοχώρων. Το χρυσό κανόνα: κάνετε προφανές την προέλευση κάθε ονόματος. Το μελλοντικό εσείς (και οι συναδέλφοι) θα σας ευχαριστήσουν.

Copyright Ταξίδια © https://el.ynyoo.com