2012-04-10 17 views
1

指定したディレクトリ内のすべての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

"指定したディレクトリ内のすべてのPythonモジュールをリロードする必要があります。" - なぜ? –

+0

誰かがディレクトリ内のすべてのモジュールをリロードしたい場合は、出力が時間に依存する場合があります。たとえば、プログラムがデータベースから定期的に更新されたデータを取得し、ユーザーモジュールがリンクされていない場合、特定のディレクトリ内のすべてのモジュールを再ロードすると便利です。 –

+1

@Jack_of_All_Trades:OPの問題にはおそらくもっと良い解決策があるということがあります。そのため、この問題が実際に何かを知る必要があります。ところで、私は説明したユースケースを理解していません。 –

答えて

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() 

おそらく、あなたはdocumentation for modulesを見てみる必要がありますが、更新することを忘れないでくださいインポートするフォルダの親を含むパス。

関連する問題