web-dev-qa-db-ja.com

モジュールを「python」に「再インポート」し、インポート後にコードを変更する方法

_foo.py_があります

_def foo():
    print "test"
_

IPythonでは次を使用します。

_In [6]:  import foo
In [7]:  foo.foo()
test
_

次に、foo()を次のように変更しました。

_def foo():
    print "test changed"
_

IPythonでは、呼び出しの結果はまだtestです:

_In [10]:  import foo
In [11]:  foo.foo()
test
_

次に使用します:

_In [15]: del foo
In [16]:  import foo
In [17]:  foo.foo()
test
_

同じフォルダーにある_foo.pyc_を削除します_foo.py_は存在しますが、まだ運がありません。

実行時に更新されたコードを再インポートする方法を知っていますか?

70
user478514

Python 2.x

reload(foo)

Python 3.x

import importlib
import foo #import the module here, so that it can be reloaded.
importlib.reload(foo)
93
John La Rooy

IPython3の autoreload 機能は適切に機能します。

Webページから実際の例を使用しています。最初に「自動リロード」機能をロードします。

In []: %load_ext autoreload
In []: %autoreload 2

次に、テストするモジュールをインポートします。

In []: import foo
In []: foo.some_function()
Out[]: 42

エディターでfoo.pyを開き、some_functionを変更して43を返します

In []: foo.some_function()
Out[]: 43

関数を直接インポートする場合にも機能します。

In []: from foo import some_function
In []: some_function()
Out[]: 42

Some_functionを変更して43を返します。

In []: some_function()
Out[]: 43
41
Ashfaq

これを自動的に実行したい場合、iPythonに付属の autoreload モジュールがあります。

4
CpILL