Есть много вопросов и ответов относительно повторного импорта на SO, но все это кажется очень противоречивым, не зная механизмов, стоящих за ним.Почему вы не можете повторно импортировать Python?
Если импортировать модуль, изменять содержимое, а затем попытаться импортировать его снова, вы увидите, что второй импорт не имеет никакого эффекта:
>>> import foo # foo.py contains: bar = 'original'
>>> print foo.bar
original
>>> # edit foo.py and change to: bar = 'changed'
>>> import foo
>>> print foo.bar
original
Я была очень счастлива автофургоне, когда я обнаружил reload
:
>>> reload(foo)
>>> print foo.bar
changed
Однако нет простого решения, когда вы импортируете элементы из модуля без импорта самого модуля:
>>> from foo import baz
>>> print baz
original
>>> # change foo.py from baz = 'original' to baz = 'changed'
>>> from foo import baz
>>> print baz
original
>>> reload(foo)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
reload(foo)
NameError: name 'foo' is not defined
Почему Python не обновляет импортированные элементы, когда вы даете ему новый оператор import
?
Если вы хотите, чтобы система автозагрузки á la PHP в вашей системе Python рассматривала fork-loop: http://opensourcehacker.com/2011/11/08/sauna-reload-the-most-awesomely-named- python-package-ever/ –
@MikkoOhtamaa, мой прецедент, приводящий к вопросу, отличается, в частности, обновление и тестирование модуля с интерактивного сеанса. В этом интерактивном сеансе есть данные, которые я не хочу выбрасывать. –