Python’da modülün yolu nasıl alınır?

Python’da bir modülün hangi klasörde olduğunu nasıl öğrenebiliriz? Bunu yapmanın birkaç farklı yöntemi var: çağrılan komut dosyasının yolunu bulma yürütülen komut dosyasının yolunu bulma çağrılan komut dosyasının dizinini bulma __file__ kullanımı İçe aktardığınız bir modül için: modülün mutlak yolunu döndürür.

İlişkili olduğu konular : python-io

Python’da bir modülün hangi klasörde olduğunu nasıl öğrenebiliriz?

Bunu yapmanın birkaç farklı yöntemi var:

  1. çağrılan komut dosyasının yolunu bulma
  2. yürütülen komut dosyasının yolunu bulma
  3. çağrılan komut dosyasının dizinini bulma

__file__ kullanımı

İçe aktardığınız bir modül için:

import bir_modul
bir_modul.__file__ 

modülün mutlak yolunu döndürür. Ancak, komut dosyası göz önüne alındığında aşağıdaki gibi bir dosyadan çağırılan kod bloğu (foo.py):

#foo.py
print '__file__', __file__

(‘python foo.py’ ile çağırdık) sadece ‘foo.py’ döndürecektir. Dosyanın başına shebang eklerseniz:

#!/usr/bin/python 
#foo.py
print '__file__', __file__

ve ./foo.py olarak çağırırsanız, çıktı olarak ‘./foo.py’ döndürülür. Farklı bir dizinden çağırdığımızda:

python bar/foo.py

veya bir shebang ekleyerek ve dosyayı doğrudan çalıştırdığımızda:

bar/foo.py

‘bar/foo.py’ şeklinde (göreli yol) döndürülür.

Dizini bulma

Buradan sonra os.path.dirname(__file__) ile dizini bulmak zor olabilir. Bu kodu dosyayla aynı dizinden çağırırsanız boş bir dize döndürür (en azından benim sistemimde böyle).

# foo.py
import os
print '__file__ çıktısı:', __file__
print 'os.path.dirname(__file__) çıktısı:', os.path.dirname(__file__)

çıkış yapacak:

__file__ çıktısı: foo.py
os.path.dirname(__file__) çıktısı: 

Başka bir deyişle, boş bir dize döndürür, bu nedenle geçerli dosya için kullanmak istiyorsanız (alınan bir modül dosyasının aksine) bu yöntem pek güvenilir görünmüyor. Bunu aşmak için abspath kullanabiliriz:

# foo.py
import os
print 'os.path.abspath(__file__) çıktısı:', os.path.abspath(__file__)
print 'os.path.dirname(os.path.abspath(__file__)) çıktısı:', os.path.dirname(os.path.abspath(__file__))

Çıktı:

os.path.abspath(__file__) çıktısı: /home/user/bar/foo.py
os.path.dirname(os.path.abspath(__file__)) çıktısı: /home/user/bar

abspath()’ın sembolik linkleri çözümlemediğini unutmayın. Bunu yapmak istiyorsanız, bunun yerine realpath() kullanın.

inspect modülünü kullanma

Alternatif olarak inspect modülünü kullanabiliriz.

inspect, import edilen modüller için iyi çalışıyor gibi görünüyor ve oldukça kısa:

import os
import inspect
print 'inspect.getfile(os) çıktısı:', inspect.getfile(os)

itaatkar bir şekilde mutlak yolu döndürüyor. Yürütülen komut dosyasının yolunu bulmak için ise:

inspect.getfile(inspect.currentframe())

Kullanabiliriz. Şu anda yürütülen komut dosyasının mutlak yolunu ise

inspect.getabsfile(inspect.currentframe()) 

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Python “in” ifadesi

Pythton’da “in” ifadesi birden fazla amaçla kullanılabilir.

Sözlük değerlerine erişme

dictionary = {"Hello": 1234, "World": 5678} print(dictionary["Hello"]) Yukarıdaki kod 1234 yazdırılacaktır.

Python’da dosya oluşturma ve değiştirme tarihini/saatini nasıl görürüz?

Platformlar arası bir şekilde değiştirme tarihini almak kolay – os.

Python’da bir script nasıl sonlandırılır?

Başka dillerde bir komut dosyasından erken çıkmak için die() gibi bir komut kullanabililriz – örneğin PHP’de.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.