[解決済み] Pythonモジュールをアンロード(再ロード)するにはどうしたらいいですか?
2022-03-19 22:45:15
質問
長期間稼働しているPythonサーバーを使用していますが、サーバーを再起動せずにサービスをアップグレードできるようにしたいです。これを行う最良の方法は何でしょうか?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
解決方法は?
既にインポートされているモジュールを再読み込みするには
importlib.reload()
:
from importlib import reload # Python 3.4+
import foo
while True:
# Do some things.
if is_changed(foo):
foo = reload(foo)
Python 2の場合。
reload
はビルトインでした。Python 3では、それは
移動
に変更しました。
imp
モジュールになります。3.4では
imp
は
非推奨
の代わりに
importlib
. 3 以降をターゲットとする場合は、以下のように、適切なモジュールを参照しながら
reload
またはインポートしてください。
ということなのでしょう。Django の開発サーバのようなウェブサーバは、サーバプロセス自体を再起動することなく、コードの変更の効果を見ることができるように、これを使用しています。
ドキュメントから引用すると
<ブロッククオート-
Python モジュールのコードは再コンパイルされ、モジュールレベルのコードが再実行され、モジュールの辞書の名前にバインドされた新しいオブジェクトのセットを定義します。
ローダー
をロードした。そのため
init
関数は2度目は呼び出されません。 - Python の他のすべてのオブジェクトと同様に、古いオブジェクトはその参照カウントがゼロになった後にのみ再生されます。
- モジュールの名前空間内の名前は、新しいまたは変更されたオブジェクトを指すように更新されます。
- 古いオブジェクトへの他の参照(モジュールの外部の名前など)は、新しいオブジェクトを参照するようにリバウンドしないので、それが必要な場合は、それらが発生する各ネームスペースで更新する必要があります。
ご質問の中にあるように、再構築するのは
Foo
オブジェクトが
Foo
クラスが
foo
モジュールになります。
関連
-
pythonを使ったオフィス自動化コード例
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] ファイルの作成日時、変更日時を取得する方法
-
[解決済み] 他のPythonファイルをインポートするには?
-
[解決済み] 親フォルダからモジュールをインポートする
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Pythonによるjieba分割ライブラリ
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】ValueError: xとyは同じサイズでなければならない