2

指定されたディレクトリ内のすべての python モジュールをリロードする必要があります。

私はこのようなことを試しました:

import sys, os
import_folder = "C:\\myFolder"
sys.path.insert( 0 , import_folder )
for dir in os.listdir(import_folder):
    name = os.path.splitext(dir)[0]
    ext = os.path.splitext(dir)[1]
    if ext == ".py":
        import( eval(name) )
        reload( eval(name) )

これを正しく行う方法を知っている人はいますか?

4

1 に答える 1

0
import os # we use os.path.join, os.path.basename
import sys # we use sys.path
import glob # we use glob.glob
import importlib # we use importlib.import_module

import_folder = 'C:\\myFolder'
sys.path.append(import_folder) # this tells python to look in `import_folder` for imports
for src_file in glob.glob(os.path.join(import_folder, '*.py')):
    name = os.path.basename(src_file)[:-3]
    importlib.import_module(name)
    reload(sys.modules[name])
    importlib.import_module(name)

コードがあります。次に、全体のセマンティクスについて説明します。importlibを使用すると、これが少し正常になりますが、それでもいくつかのバグが助長されます。これは、サブディレクトリ内のソース ファイルで壊れていることがわかります。おそらくすべきことは、パッケージをインポートし(フォルダー全体をインポート)、次の.ように演算子を使用することです。

import sys # we use sys.path
sys.path.append('C:\\')
import myFolder
...
myFolder.func1(foo)
myFolder.val
bar = myFolder.Class1()

おそらくmodules のドキュメントを参照する必要がありますが、インポートするフォルダーの親を含むようにパスを更新することを忘れないでください。

于 2013-01-02T05:58:33.733 に答える