koddla

Yazılımcıları bilgi ile güçlendirir.

Python’da __file__ değişkeni ne anlama geliyor/ ne yapıyor?

Python’daki bir dosyadan bir modül yüklendiğinde, __file__ bu dosyanın yoluna ayarlanır. Daha sonra, dosyanın bulunduğu dizini bulmak için bunu diğer işlevlerle birlikte kullanabilirsiniz.

Örneklerimize teker teker bakalım:

A = os.path.join(os.path.dirname(__file__), '..')
# A, programın bulunduğu dizinin üst dizinidir.

B = os.path.dirname(os.path.realpath(__file__))
# B, programın bulunduğu kurallı dizindir.

C = os.path.abspath(os.path.dirname(__file__))
# C, programın bulunduğu dizinin mutlak yoludur.

Bu örneklerden döndürülen çeşitli değerlere aşağıdaki gibi bakabiliriz.

import os
print(__file__)
print(os.path.join(os.path.dirname(__file__), '..'))
print(os.path.dirname(os.path.realpath(__file__)))
print(os.path.abspath(os.path.dirname(__file__)))

Bunların nasıl farklı olduğunu görmek için bu kodu farklı konumlardan (../text.py, ~/python/text.py vb.) çalıştırın.


Kafa karışıklığına yol açacak bir değişiklilk hakkında da not ekleyelim. Python 3.4 itibariyle __file__ davranışında küçük bir değişiklik oldu:

  • Bir modül doğrudan yürütülürse, __file__ kullanıldığı modülün göreli yoluna ayarlanır.
  • Aksi takdirde dosyanın mutlak yoluna ayarlanır.

Modül öznitelikleri (ve ilgili değerler) artık, bir komut dosyasının doğrudan göreli bir yol kullanılarak yürütülmesi dışında, varsayılan olarak her zaman mutlak yollar içermelidir. (Brett Cannon’ın 18416 sayısında.)

Örnek:

X modül doğrudan ve modül y dolaylı olarak çağrılır:

# x.py:
from pathlib import Path
import y
print(__file__)
print(Path(__file__))
print(Path(__file__).resolve())

# y.py:
from pathlib import Path
print(__file__)
print(Path(__file__))

Çalıştırma çıktısı: python3 x.py

/home/aderchox/mytest/y.py                                                                                                                       
/home/aderchox/mytest/y.py                                                                                                                       
x.py                                                                                                                                             
x.py                                                                                                                                             
/home/aderchox/mytest/x.py

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top