2016-11-19 2 views
0

У меня возникла проблема с перезагрузкой модулей, которые импортируются и используются в другом модуле. Для наглядности давайте рассмотрим пример, когда у меня есть два модуля:Как перезагрузить модуль, который импортируется в другие модули

Первый модуль: operation.py

def f(x,y): 
    return x+y 

Второй модуль: test_operation.py

import operation 
x=3 
y=4 
z= operation.f(x,y) 
print z 

Если я иду к переводчику и напишите:

import test_operation 

Я получу 4 печатных (z = 4). Если изменить функцию п в первом модуле operation.py быть:

def f(x,y): 
    return x+y+1 

, а затем я пишу в интерпретатор Reload (test_operation), я все еще получаю 4 печататься вместо 5. Это кажется то, что оно перезагружает модуль test_operation.py, но не перезагружает модуль operation.py, который импортируется в test_operation.py.

Как решить такую ​​проблему? и В общем случае, как я могу убедиться, что все импортированные модули в моем коде повторно импортируются (или перезагружаются) каждый раз, когда они меняются?

+0

используйте 'reload (operation)', затем 'reload (test_operation)'. – Uriel

+0

вы перезагружаете уже импортированный модуль в память после изменения в операции.py не новый с вашим редактированием –

+0

Я понимаю, что я могу перезагрузить модули один за другим вручную, но есть ли более автоматический метод, который перезагружает модуль и все его импортированные модули, и идет так рекурсивно? Есть ли глубокая перезагрузка (например, есть копия и глубокая копия)? –

ответ

0

От переводчика: просто перезагрузить operation в test_operation контексте модуля, используя полный путь:

reload(test_operation.operation) 

В test_operation.py, вы могли бы назвать reload(operation) так перезарядка test_operation также перезагружать operation

для полного рекурсивного проверки перегрузочной здесь (не уверен, что это хорошая идея ...): Recursive version of 'reload'

+0

Да, действительно то, что вы сказали, работает. Я проверил также ссылку, которую вы использовали для рекурсивной перезагрузки, это встроенная в adhoc рекурсивная функция. Я думал, что есть встроенный метод, например перезагрузка, потому что, если есть много модулей, которые необходимо перезагрузить, и те же самые модули импортируют другие модули, которые необходимо перезагрузить, это может быть медленная процедура для этого вручную. Почему вы не думаете, что рекурсивная перезагрузка - это не очень хорошая идея? –

+0

перезагрузка все может быть медленной, вот и все. –

+0

Да, я понимаю, но есть ли встроенная функция для этого? Как перезагрузка? (так что это будет похоже на то, что обеспечивается копией и глубокой копией) –

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