Göreli içe aktarma, bir paketi geçerli komut dosyasına / pakete göre içe aktardığınızda gerçekleşir.
Örneğin aşağıdaki ağacı düşünün:
mypkg
├── base.py
└── derived.py
Şimdi, bir derived.py
şey istiyorsun base.py
. Python 2'de şu şekilde yapabilirsiniz derived.py
:
from base import BaseThing
Python 3 artık bunu desteklemiyor çünkü 'göreli' veya 'mutlak' isteyip istemediğiniz açık değil base
. Başka bir deyişle, base
sistemde yüklü bir Python paketi olsaydı, yanlış olanı alırsınız.
Bunun yerine , bir modülün konumunu yol bazında açıkça belirten açık içe aktarmalar kullanmanızı gerektirir . Sizin derived.py
gibi görünecektir:
from .base import BaseThing
Lider .
' base
modül dizininden içe aktar' diyor ; başka bir deyişle, ile .base
eşleşir ./base.py
.
Benzer şekilde, ..
dizin hiyerarşisini yukarı ../
( ..mod
eşleme ile ../mod.py
) yapan ve sonra ...
iki düzey yukarı ( ../../mod.py
) ve benzeri devam eden bir önek vardır .
Ancak, yukarıda listelenen göreli yolların , geçerli çalışma dizinine değil , geçerli modülün ( derived.py
) bulunduğu dizine göreli olduğuna dikkat edin .
@BrenBarn zaten yıldız alma durumunu açıkladı. Tamlık için aynı şeyi söylemek zorundayım;).
Örneğin, birkaç math
işlev kullanmanız gerekir, ancak bunları yalnızca tek bir işlevde kullanırsınız. Python 2'de yarı tembel olmanıza izin verildi:
def sin_degrees(x):
from math import *
return sin(degrees(x))
Python 2'de zaten bir uyarıyı tetiklediğini unutmayın:
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
Modern Python 2 kodunda ve Python 3'te aşağıdakilerden birini yapmanız gerekir:
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
veya:
from math import *
def sin_degrees(x):
return sin(degrees(x))