2016-03-31 16 views
2

この質問は[Python: reload component Y imported with 'from X import Y'?]と似ています。しかし、明らかにPythonで3モジュールをPython3でリロードする

をdoesntの仕事をリロード私は当初、私はvb_Estepを修正バグが原因しかし

from vb2GP import vb_Estep 

を、持っていました。私はimportlib.reload(vb_Estep)を使用して再ロードしようとすると、私はエラーを取得する:

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 

は、私も、私は私がオフに開始するvb2GPを輸入したことがないので、理にかなっているエラーNameError: name 'vb2GP' is not definedを取得importlib(vb2GP.vb_Estep)を試してみました。

質問はです。importlibを使用してPython3でコンポーネントをリロードするにはどうすればよいですか。

+0

'vb_Estep'を修正しましたか(変更可能な場合)か、新しいオブジェクトに名前を再バインドしましたか(変更できない場合は"変更 "する唯一の方法でしょう)? – Blckknght

+0

私はちょうどいくつかの行を書き直しました。私はPythonにはかなり新しいので、その質問に答えるかどうかは完全にはわかりません。 –

答えて

2

使用しているreload関数は、モジュールでのみ動作し、インポートされたオブジェクトでは直接動作しません。これを使用するには、最初にvb2GPをインポートしてから、モジュールオブジェクトでreloadを呼び出してから、新しいバージョンのモジュールから再ロードされたvb_Estep値を抽出する必要があります。

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 

しかし、それは実際にあなたが現在vb_Estep値を「修正」方法を正確に応じて、必要ではないかもしれません。名前を新しい値にリバウンドさせるだけの場合は、reloadをまったく実行せずに古いものを再インポートすることができます(from vb2GP import vb_Estepをもう一度使用してください)。上記のコードreloadが必要になるのは、(変数名自体を再バインドせずにその内容や属性を変更するなどして)値を変更した場合のみです。

関連する問題