Как и просили, лучшее, что вы можете сделать, это
>>> from project.models.user import *
>>> import project # get module reference for reload
>>> reload(project.models.user) # reload step 1
>>> from project.models.user import * # reload step 2
, было бы лучше и чище, если бы вы использовали пользовательский модуль напрямую, а не import *
(что почти никогда не является правильным способомсделай это).Тогда это будет просто
>>> from project.models import user
>>> reload(user)
Это будет делать то, что вы хотите.Но это не очень приятно.Если вам действительно нужно перезагружать модули так часто, я должен спросить: почему?
Мое подозрение (подтвержденное предыдущим опытом с людьми, задающими аналогичные вопросы), что вы тестируете свой модуль.Есть много способов проверить модуль, и сделать это вручную в интерактивном интерпретаторе - один из худших способов.Сохраните одну из ваших сессий в файл и используйте doctest
, для быстрого исправления.Или запишите его как программу и используйте python -i
.Однако единственное действительно отличное решение - это использование модуля unittest
.
Если это не так, надеюсь, это что-то лучше, а не хуже.reload
действительно бесполезно (на самом деле он удален в 3.x).Это не работает эффективно - вы можете перезагрузить модуль, но оставить остатки от предыдущих версий.Он даже не работает со всеми видами модулей - модули расширения не будут перезагружаться должным образом, а иногда даже ужасно ломаться при перезагрузке.
Контекст использования этого в интерактивном интерпретаторе не оставляет многовыбор того, что вы делаете, и какое будет реальное лучшее решение.Помимо этого, иногда люди использовали reload()
для реализации плагинов и т. Д. Это в лучшем случае опасно, и часто это можно сделать по-другому, используя либо exec
(ах та злая территория, на которой мы находимся), либо отдельный процесс.