Impor relatif terjadi setiap kali Anda mengimpor paket relatif terhadap skrip / paket saat ini.
Pertimbangkan contoh pohon berikut:
mypkg
├── base.py
└── derived.py
Sekarang, Anda derived.pymembutuhkan sesuatu dari base.py. Dengan Python 2, Anda bisa melakukannya seperti ini derived.py:
from base import BaseThing
Python 3 tidak lagi mendukung itu karena tidak eksplisit apakah Anda menginginkan 'relatif' atau 'absolut' base. Dengan kata lain, jika ada paket Python yang baseterinstal di sistem, Anda akan salah.
Alih-alih itu mengharuskan Anda untuk menggunakan impor eksplisit yang secara eksplisit menentukan lokasi modul berdasarkan path-sama. Anda derived.pyakan terlihat seperti:
from .base import BaseThing
Yang terkemuka .mengatakan 'impor basedari direktori modul'; dengan kata lain, .basepeta ke ./base.py.
Demikian pula, ada ..awalan yang naik hirarki direktori seperti ../(dengan ..modpemetaan ke ../mod.py), dan ...yang naik dua tingkat (../../mod.py ) dan seterusnya.
Namun harap dicatat bahwa jalur relatif yang tercantum di atas relatif terhadap direktori tempat modul saat ini ( derived.py) berada, bukan direktori kerja saat ini.
@BrenBarn telah menjelaskan impor bintang. Untuk kelengkapan, saya harus mengatakan hal yang sama;).
Misalnya, Anda perlu menggunakan beberapa mathfungsi tetapi Anda menggunakannya hanya dalam satu fungsi. Dalam Python 2 Anda diizinkan menjadi semi-malas:
def sin_degrees(x):
from math import *
return sin(degrees(x))
Perhatikan bahwa itu sudah memicu peringatan dengan Python 2:
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
Dalam kode Python 2 modern Anda harus dan dalam Python 3 Anda harus melakukan salah satu:
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
atau:
from math import *
def sin_degrees(x):
return sin(degrees(x))