python の reload() (Python3では imp.reload())を使うと、import 済みのモジュールをリロードすることができます。しかし、この方法でトップレベルスクリプト(name == 'main' であるスクリプト)をリロードすることはできません。
もしトップレベルスクリプトをリロードしたい場合、現在のトップレベルスクリプトをモジュールとして import する、ラッパースクリプトを作成する必要があります。
現在のトップレベルスクリプトが a.py、それをラップする新しいトップレベルスクリプトが wrap_a.py である場合、次のように記述できます。
Python
1# a.py
2def print_hello():
3 print 'hello'
4
5if __name__ == '__main__':
6 print_hello()
Python
1# wrap_a.py
2import a
3
4def main():
5 a.print_hello()
6
7def something():
8 if (reload_required == True): # リロードが必要な条件判定
9 reload(a) # a.py をリロード
10 main() # プログラム全体を再実行
11
12if __name__ == '__main__':
13 main()
なお、reload() によるモジュール単位の再読み込みにはいくつか重要な注意事項があります。
詳しくは公式ドキュメントを参照されることをお勧めします。
退会済みユーザー
2016/04/25 15:13