Python’da bir klasördeki tüm modüller nasıl yüklenir?

Bir dizin altındaki tüm modülleri içeri aktarmanın almanın bir yolu var mı?Şöyle bir klasör yapımız olsun: Bunun için muhtemelen importlib kullanmak isteriz.

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

Bir dizin altındaki tüm modülleri içeri aktarmanın almanın bir yolu var mı?
Şöyle bir klasör yapımız olsun:

/Foo
    bar.py
    spam.py
    eggs.py

Bunun için muhtemelen importlib kullanmak isteriz.

Önce Foo dizinini bir paket haline getirelim. Bunu yaparken__init__.py adlı bir dosya tanımlıyoruz, __init__.py dosyasının içerisinde ise aşağıdaki importları gerçekleştiriyoruz:

import bar
import eggs
import spam

Eğer bu işlemin dinamik olmasını istiyorsak (ki bu iyi bir fikir olabilir veya olmayabilir), list dir ile tüm py dosyalarını listeleriz ve bunları aşağıdaki gibi bir kod parçasıyla içe aktarırız:

import os
for module in os.listdir(os.path.dirname(__file__)):
    if module == '__init__.py' or module[-3:] != '.py':
        continue
    __import__(module[:-3], locals(), globals())
del module

Ardından, kodunuzdan Foo’yu içeri aktarırız:

import Foo

Artık aşağıdaki modüllere ulaşabiliyoruz:

Foo.bar
Foo.eggs
Foo.spam

ve saire. isim çakışmaları ve kodu analiz etmeyi zorlaştırdığı için (ve başka çeşitli diğer nedenlerden dolayı) from Foo import * şeklinde bir kullanım iyi bir fikir olmayacaktır.


__all__ değişkeni

Başka bir yöntem de __all__ değişkenini kullanmak olacaktır:

Geçerli klasördeki tüm python (.py) dosyalarını listeleyin ve bunları __init__.py içinde __all__ değişkenine atayın.

from os.path import dirname, basename, isfile, join
import glob
modules = glob.glob(join(dirname(__file__), "*.py"))
__all__ = [ basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py'

Örnek

Detaylarla uğraşmayıp sadece işe yarayan bir kod arıyorsanız aşağıdakileri yapabilirsiniz:

foo adında bir klasör oluşturun ve bu klasör altına main.py isimli bir dosya oluşturun. Dosya içeriği aşağıdaki gibi olsun:

from hellokitty import *
spam.spamfunc()
ham.hamfunc()

hellokitty isimli bir klasör oluşturun:

Altına __init__.py isimli bir dosya oluşturun ve aşağıdaki kodu yapıştırın:

__all__ = ["spam", "ham"]

hellokitty altına spam.py ve ham.py isimli iki python dosyası oluşturun.

spam.py içinde bir işlev tanımlayın:

def spamfunc():
  print("Spammity spam")

ham.py içinde de bir işlev tanımlayın:

def hamfunc():
  print("Upgrade from baloney")

Çalıştırın:

el@apollo:/home/el/foo$ python main.py 
spammity spam
Upgrade from baloney

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 map fonksiyonu

Python’da map() fonksiyonu, listeler, üreteçler, dizeler vb.

Python’da iki boyutlu array nasıl tanımlanır?

Aşağıdaki gibi başlangıç boyutu olmayan iki boyutlu bir dizi tanımlamak isteyelim: Bunu yapmak işe yaramayacaktır.

Python’da __future__ ne için kullanılır ve nasıl çalışır?

__future__ Python modüllerinde sık sık görünür.

Python’da dosya boyutuna nasıl bakarım?

Dosya boyutunun önemli olduğu bir uygulama yapmaya çalışıyorum.

Yorum Gönderin

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

koddla
Tema Mundana by WowThemes.net.