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, basesistemde 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.pygibi görünecektir:
from .base import BaseThing
Lider .' basemodül dizininden içe aktar' diyor ; başka bir deyişle, ile .baseeşleşir ./base.py.
Benzer şekilde, ..dizin hiyerarşisini yukarı ../( ..modeş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ç mathiş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))