2012-04-10 2 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, но не забудьте обновить путь для включения родителя папки, которую вы хотите импортировать.

Смежные вопросы