2017-07-25 21 views
0

私はPython + IPython for Data Scienceを使用しています。PythonリロードとIPython自動リロードも機能していません

%load_ext autoreload 
%autoreload 2 

今...してみましょう:私は、モジュールを自動再ためにIPythonをお願いし、各セッションの開始時に

python_workfolder 
| 
|---a 
| |---__init__.py 
| |---a1.py 
| |---a2.py 
| 
|---b 
| |---__init__.py 
| |---b1.py 
| |---b2.py 
| 
|---c 
| |---__init__.py 
| |---c1.py 
| |---c2.py 
| 
| 
|---script1.py 
|---script2.py 

のようなもの、パッケージに整理、私が書いたすべてのモジュールが含まれているフォルダを作りましたa1.pyには、スクリプトの1つから呼び出すクラスA1が含まれています。パッケージa__init__.pでは、私はクラスA1で何らかのエラーがあった場合、私は

from a.a1 import A1 

が必要

import a1 

は次にスクリプトで、私はクラスをインポートするモジュールをインポートして、私はそれを修正し、何もありませんカーネルを再起動することなくPythonにリロードさせることができます。

私はdel a1,del sys.modules['a1'],del sys.modules['a']で試しました。カーネルを再起動しないうちに古いバージョンのクラスを使用するたびに誰かが私にいくつかの提案を与えることができますか?

+0

を印刷するdispを変更するあなたは、「リロードが動作しない」ことを示す前に、再読み込みFineManualしたいこと?注意点と制限が明確に説明されています:https://docs.python.org/3/library/imp.html#imp.reload –

+0

IPythonシェルにコマンドを入力すると 'reload'が動作することがわかりました私がPyzo(私が使用しているIDE)を介してそれらを実行する場合はありません。それは問題だった... – Marco

答えて

0

これは面白いです。私の問題はIPythonによるものではなく、Pyzo(私が使用しているIDE)によると思われます。私はA1にTestClassをを追加しました:

class TestClass: 
    def __init__(self): 
     pass 
    def disp(self): 
     print('AAA') 

これは私がIPythonシェルでコマンドを実行しているから得る出力されます。

In [2]: from a.a1 import TestClass 
In [3]: t=TestClass() 
In [4]: t.disp() 
AAA 

今、私は 'BBB'

In [5]: t.disp() 
BBB 
を印刷する dispを変更します

それは実際にはリロードされました...また、最初に自動リロードコマンドをスキップすると、再び 'AAA'が出力されるためです。それは働いている。

代わりにPyzoからコマンドを実行すると(スクリプトを作成し、行を選択してF9キーを押すか、エディタタブを右クリックして「ファイルを実行」を選択してください)、再ロードされません!再び

In [2]: (executing lines 1 to 3 of "testscript.py") 
AAA 

私は「BBB」

In [3]: (executing lines 1 to 3 of "testscript.py") 
AAA 
関連する問題