2016-03-31 22 views
2

Bu soru, [Python: reload component Y imported with 'from X import Y'?] ürününe benzer. Ancak, açıkça piton 3.Python3 modülündeki bileşen düzeltmesi

yılında doesnt iş yeniden Başlangıçta nedeniyle ben vb_Estep modifiye bir hata Ancak

from vb2GP import vb_Estep 

vardı. Ben importlib.reload(vb_Estep) kullanarak yeniden çalıştığımda hata alıyorum:

File "<ipython-input-61-72416bca3a93>", line 1, in <module> 
    importlib.reload(vb_Estep) 

    File "/Users/sachin/anaconda/lib/python3.5/importlib/__init__.py", line 139, in reload 
    raise TypeError("reload() argument must be module") 

TypeError: reload() argument must be module 

Hatta ben ile başlamak vb2GP ithal asla beri mantıklı hatasını NameError: name 'vb2GP' is not defined olsun importlib(vb2GP.vb_Estep) çalıştı.

soru, importlib kullanarak Python3'teki bileşenleri yeniden nasıl yüklersiniz.

+0

'vb_Estep '' i (değiştirilemiyorsa) yerinde değiştirdiniz mi ya da adı yeni bir nesneye mi eklediniz (bu, değiştirilemiyorsa" değiştirmenin tek yolu ")? – Blckknght

+0

Sadece birkaç satır yeniden yazdım. Ben python için oldukça yeni, bu soruya cevap verip vermediğinden tamamen emin değilim. –

cevap

2

Yalnızca, yalnızca içe aktarılan nesnelerden değil, yalnızca modüller üzerinde çalıştığınız reload işlevini kullanırsınız. Bunu kullanmak için önce vb2GP'u içe aktarmanız, ardından modül nesnesinde reload'u çağırmanız ve ardından yeniden yüklenmiş vb_Estep değerini modülün yeni sürümünden ayıklamanız gerekir.

import importlib 

import vb2GP      # import the old version of the module 
vb2GP = importlib.reload(vb2GP) # reload it 
vb_Estep = vb2GP.vb_Estep   # get a reference to the value in the reloaded module 

Ama bu aslında "modifiye" tam olarak nasıl geçerli vb_Estep değerine bağlı olarak gerekli olmayabilir. Sadece adı yeni bir değere geri döndürdüğünüzde, eski olanı reload hiçbir işlem yapmadan yeniden içe aktarabilirsiniz (yalnızca from vb2GP import vb_Estep'u tekrar kullanın). Yalnızca, değeri yukarıdaki gibi değiştirdiyseniz (ör., Değişken adını kendisi yeniden göndermeden içeriğini veya niteliklerini değiştirerek) yukarıdaki reload kodunun gerekeceği olacaktır.