L'importazione relativa avviene quando si importa un pacchetto relativo allo script / pacchetto corrente.
Si consideri ad esempio il seguente albero:
mypkg
├── base.py
└── derived.py
Ora, il tuo derived.pyrichiede qualcosa da base.py. In Python 2, potresti farlo in questo modo (in derived.py):
from base import BaseThing
Python 3 non lo supporta più poiché non è esplicito se si desidera "relativo" o "assoluto" base. In altre parole, se ci fosse un pacchetto Python chiamato baseinstallato nel sistema, otterresti quello sbagliato.
Richiede invece l'uso di importazioni esplicite che specificano esplicitamente la posizione di un modulo su una base simile al percorso. Il tuo derived.pysarebbe simile a:
from .base import BaseThing
Il leader .dice "importa basedalla directory del modulo"; in altre parole, .basemappa a ./base.py.
Allo stesso modo, esiste un ..prefisso che sale alla gerarchia di directory come ../(con ..modmapping a ../mod.py), e quindi ...che sale di due livelli ( ../../mod.py) e così via.
Si noti tuttavia che i percorsi relativi sopra elencati erano relativi alla directory in cui derived.pyrisiede il modulo corrente ( ), non alla directory di lavoro corrente.
@BrenBarn ha già spiegato il caso dell'importazione a stella. Per completezza, dovrò dire lo stesso;).
Ad esempio, è necessario utilizzare alcune mathfunzioni ma le si utilizza solo in una singola funzione. In Python 2 ti è stato permesso di essere semi-pigro:
def sin_degrees(x):
from math import *
return sin(degrees(x))
Si noti che attiva già un avviso in Python 2:
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
Nel moderno codice Python 2 dovresti e in Python 3 devi fare:
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
o:
from math import *
def sin_degrees(x):
return sin(degrees(x))