Python >> Python-zelfstudie >  >> Python

Wat is absolute import in Python?

Het onderscheid tussen absolute en relative die hier wordt getekend, lijkt erg op de manier waarop we praten over absolute en relatieve bestandspaden of zelfs URL's.

Een absolute {import, path, URL} vertelt u precies hoe u datgene kunt krijgen waarnaar u op zoek bent, meestal door elk onderdeel te specificeren:

import os, sys
from datetime import datetime
from my_package.module import some_function

Relatief {imports, paths, URLs} zijn precies wat ze zeggen dat ze zijn:ze zijn relatief naar hun huidige locatie. Dat wil zeggen, als de directorystructuur verandert of het bestand wordt verplaatst, kunnen deze kapot gaan (omdat ze niet langer hetzelfde betekenen).

from .module_in_same_dir import some_function
from ..module_in_parent_dir import other_function

Daarom hebben absolute importen de voorkeur voor code die wordt gedeeld.

Ik werd in opmerkingen gevraagd om een ​​voorbeeld te geven van hoe from __future__ import absolute_import sluit hierbij aan en hoe het gebruikt moet worden. Toen ik dit voorbeeld probeerde te formuleren, realiseerde ik me dat ik het gedrag ervan ook niet helemaal kon verklaren, dus stelde ik een nieuwe vraag. Dit antwoord geeft een codevoorbeeld met een correct werkende implementatie van from __future__ import absolute_import , waar het daadwerkelijk een dubbelzinnigheid oplost.

Het geaccepteerde antwoord gaat dieper in op waarom dit werkt zoals het werkt, inclusief een bespreking van de verwarrende bewoordingen van de Python 2.5 changelog. In wezen is de reikwijdte van deze richtlijn (en bij uitbreiding het onderscheid tussen absolute en relatieve invoer in Python) zeer, zeer smal. Als je merkt dat je deze onderscheidingen nodig hebt om je code te laten werken, kun je waarschijnlijk beter je lokale module hernoemen als dat mogelijk is.