@Kindall tarafından sağlanan Guido postasının yardımıyla, standart içe aktarma sürecini modülün her üyesinde bulmaya çalışmak sys.pathve bu arama sonucunda dosyalamak olarak anlayabiliriz (daha fazla ayrıntı PyMOTW Modülleri ve İthalatlarında ). Dolayısıyla, modül mutlak bir yolda bulunuyorsa sys.pathsonuç mutlaktır, ancak sys.pathsonuçta göreli bir yolda yer alıyorsa göreli olur.
Artık site.pybaşlangıç dosyası , başlangıç dosyası sys.pathdışında yalnızca mutlak yolu teslim etmeye özen gösterir ''; bu nedenle, PYTHONPATH'ı ayarlamak dışında başka bir yolla değiştirmezseniz (önek eklemeden önce yolu da mutlak hale getirilir sys.path), her zaman mutlak bir yol elde edersiniz. yol, ancak modüle mevcut dizin üzerinden erişildiğinde.
Şimdi sys.path'i komik bir şekilde kandırırsanız, her şeyi elde edebilirsiniz.
Örneğin , kodun foo.pyiçinde örnek bir modülünüz varsa /tmp/:
import sys
print(sys.path)
print (__file__)
/ Tmp içine girerseniz şunu elde edersiniz:
>>> import foo
['', '/tmp', '/usr/lib/python3.3', ...]
./foo.py
Ne zaman içinde de /home/user, eklersen /tmpsenin PYTHONPATHolsun:
>>> import foo
['', '/tmp', '/usr/lib/python3.3', ...]
/tmp/foo.py
Ekleseniz bile ../../tmpnormalleşecek ve sonuç aynı.
Ancak PYTHONPATHsizi doğrudan kullanmak yerine komik bir yol kullanırsanız, sebep kadar komik bir sonuç alırsınız.
>>> import sys
>>> sys.path.append('../../tmp')
>>> import foo
['', '/usr/lib/python3.3', .... , '../../tmp']
../../tmp/foo.py
Guido, yukarıda belirtilen başlıkta python'un neden tüm girişleri mutlak yollara dönüştürmeye çalışmadığını açıklıyor:
her içe aktarmada getpwd () çağrısı yapmak zorunda kalmak istemiyoruz .... getpwd () nispeten yavaştır ve bazen tamamen başarısız olabilir,
Yolunuz kullanılır Yani olduğu gibi .