2016-04-07 11 views
0

私は、次のような別のファイルからクラスをインポートし、メインファイルしている:私はHoldemTask.py変更すると、変更がメインファイルにPythonのモジュールのアップデート

from pybrain.rl.environments.HoldemTask import HoldemTask. 

反映されません。私が見つけた唯一の回避策はPybrainを実行することです。

python setup.py install 

モジュールをリロードすることはできますか? Reload()は機能していないようです。

答えて

1

まずオフ:python setup.py installは、一般的にそれがインストールされているコードのコピーを作成しますので、あなたは、あなたが変更を有効にする前に、チャンスは開発のためにあなたが調整されるべきであるとしていることを実行する必要があることを発見している場合は、あなたのPYTHONPATHsys.pathそうPythonのサイトパッケージライブラリからではなく、ソースツリーから直接インポートする必要があります。

from pybrain.rl.environments import HoldemTask # module object, not class 
print(HoldemTask.__file__) 

第二に、一般的にコードの変更を行う際にPythonのプロセスを再起動するためにはるかに良いです:あなたはそれを実行するときは、すぐにあなたのコードは、メインのファイルの上にこれを置くことによって輸入されたファイルをどの確認することができますそれらが有効になっていることを確認してください。あなたが本当に再起動せずに表示するように変更を取得する必要がある場合は、をお読みください。

モジュールをPythonでリロードすると、将来のインポートにのみ影響します。リロードをインプロセスで処理するには、リロード後にインポートしたクラスオブジェクトを置き換える必要があります。たとえば、あなたが記載されているインポートを行う「メインファイル」の文脈で(クラスメソッドや関数内を結構です):

# we need a module object to reload(), not the class inside it 
from import pybrain.rl.environments import HoldemTask as HoldemTask_module 
reload(HoldemTask_module) 
# we then need to replace the old class object with the reloaded one 
# in the main file's module-wide (aka "global") namespace 
global HoldemTask 
HoldemTask = HoldemTask_module.HoldemTask 

ここに一つの最終警告既存HoldemTaskオブジェクトを使用し続けることですこれは、pre-reloadクラスオブジェクトへの参照を埋め込むためです。インプロセスリロードが完了する唯一の方法は、元のモジュールに基づいて作成されたすべてのインスタンスをすべて破棄するようにコードが具体的に記述されているかどうかです。

+0

ありがとうございます!私は自分のPYTHONPATHを変更し、ファイルを新しいフォルダに入れました。 –

関連する問題