Python シェルでクラスを再読み込みする方法は?
質問
あるパッケージに属する同名のクラスを定義したモジュールをインポートすると、親パッケージの__init__.pyにより、モジュールではなくクラスとしてインポートされます。参照 ディレクトリが異なるとインポート結果が異なる を参照してください。Pythonシェルやipythonシェルで、もし私が
from MyPak import MyMod
MyModuleは常にClassとしてインポートされるため、リロードすることができません(reload()はモジュールに対してのみ機能します)。実行する
from MyPak import MyMod
は、クラス定義を更新しないようです。誰か、Pythonシェルでクラスを更新する方法を教えてください。
ps. pythonインタプリタを再起動することなく。
pps . 念のため、手元にあるコードでテストしてみたいと思います。私は実際にBioPythonについて話しており、Bio.PDB.PDBParserに取り組んでいます。ipythonシェル(v0.10)を使ってPDBParser.pyを編集しています。ただ、ipythonでそれを再読み込みする方法がありません。
というわけで、私がやったことは以下の通りです。
# start ipython v0.10
import Bio
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure()
# then I make changes,e.g. simply print some text, in PDBParser.py
del Bio
del PDBParser
del s
import Bio # or reload(Bio) without deleting all the objects
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure() # expected output after change not seen :(
印刷されたテキストを見ることができませんでした。何らかの原因で変更が適用されなかったのです。
どうすればよいのでしょうか。
やっと答えが見つかりました。
import MyPak
from MyPak import MyMod
編集後
MyPak/MyMod.py
ファイルを再読み込みすると、クラス
MyMod
をファイル
MyMod.py
を作成する必要があります。
import sys
del sys.modules['MyPak.MyMod']
reload(MyPak)
from MyPak import MyMod
注意事項 :
-
実行中
del MyPak
またはdel MyMod
またはdel MyPak.MyMod
は、単に名前バインディングを削除するだけなので、問題は解決しません。Python が検索するのはsys.modules
を検索して、モジュールが既にインポートされているかどうかを確認するだけです。ポストでの議論をチェックアウト モジュール名が sys.modules と globals() の中で . -
MyPakをリロードするとき、pythonは次の行を実行しようとします。
from MyMod import MyMod
でMyPak/__init__.py
. しかし、それはMyPak.MyMod
でsys.modules
であるため ではない リロードMyMod
ただしMyPak/MyMod.py
は更新されています。そして、新しいMyPak/MyMod.pyc
は生成されません。
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 億の相対的輸入
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。