2017-12-06 1 views
0

spyder 3.2.4をpythonで使用しています。Pythonスパイダー:別のファイルの関数を変更しても効果がありません

私は関数を(別のファイルで)呼び出すと、私のメインスクリプトからmy_func()を呼び出すことができますが、その関数の "古いバージョン"を使用します。明示:

私がmy_funcを変更してそのファイルを保存すると、メインスクリプト全体を実行した場合にのみ、新しいバージョンの関数がメインスクリプトから呼び出されます。

(実行セルを使用して、または選択した行を実行して)my_funcを使って行を実行すると、my_funcの古いバージョンが使用されます。

私はmy_funcを(myOtherFile import my_funcから) "reimported"しなければなりませんでしたので、これらの行も実行しようとしましたが、機能の古いバージョン(変更されていない)は引き続き使用されます。

私は何か誤解しましたか、これは本当に深刻なバグですか?スパイダーを閉じて再起動すると(機能の新しいバージョンが使用されます)、これは容認できない解決方法です。

答えて

1

この動作は、(I)Pythonインタープリタがインポートをどのように処理するかと関係があります。

あなたはここに(可能な解決策との)詳細な説明を見つけることができます:https://support.enthought.com/hc/en-us/articles/204469240-Jupyter-IPython-After-editing-a-module-changes-are-not-effective-without-kernel-restart

短い答え:
- のいずれかのカーネル
を再起動 - またはimportlib.reload(https://docs.python.org/3/library/importlib.html#importlib.reload
を使用する - または使用IPythonの自動再を拡張子(http://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html

1

スパイダーメンテナここ)これは、Pythonが動作する方法だ、バグではありません。しかし、通常の動作は、私たちのIPythonの魔法を%autoreloadのIPythonの魔法をロードさせることによって改善することができます。その変更を加えれば、ファイルを保存した後すぐにコンソールにコードを再ロードします。

3.2.5バージョン(2017年12月リリース予定)でこれを行います。

関連する問題