[Gelistirici] PiSi'de "from module import X"

Barış Metin baris at pardus.org.tr
19 Nis 2007 Per 00:19:33 EEST


Selam,

IRC toplantısında konuştuğumuz gibi buna hızlıca bir baktım. Önce toplantıda 
bahsettiğim hacky yöntemi denedim fakat byte-compile işinin çok daha basit 
bir yöntemini buldum :). Şöyle ki:

mymodule.py adında bir modülümüz olsun. İçeriği şu:

def karpuz():
    print "round 1"

In [1]: from mymodule import karpuz
In [2]: karpuz()
round 1

Gidip mymodule.py'yi düzenleyelim. Yeni içerik:
def karpuz():
    print "round 2"

In [3]: import sys
In [4]: reload(sys.modules[karpuz.__module__])
Out[4]: <module 'mymodule' from 'mymodule.py'>
In [5]: exec("from %s import karpuz" % karpuz.__module__)
In [6]: karpuz()
round 2

Faik, bu işimizi çözüyor mu? Görebildiğim kadarı ile başka yöntemleri de var 
ama en basitçe uygulanabilecek bu. Bu işi otomatik yapabiliriz tabi, global 
içerisinde __module__'ü farklı/istediğimiz olan tüm nesneleri bu şekilde 
reload ettiririz...

PS: Reload işini PiSi dışarısında yapmak konusunu biliyorum, bu ilk "from 
import" sorunumuz için bir öneri şimdilik...

PS2: Daha önce konuşulan ve Çağlar'ın da toplantıda bahsettiği reload'un bir 
wrapper tarafından yapılması fikri sıcak gelmemeye başladı. RPM bunu bir 
wrapper ile çözüyor ama Python gibi bir dil kullanmıyor :).

iyi çalışmalar,
-- 
Barış Metin



Gelistirici mesaj listesiyle ilgili daha fazla bilgi