Хотя reload
делает перезагружать модуль, а другой ответ упоминает, что вам нужно довольно много мер предосторожности, чтобы сделать его работу гладко - и для некоторых вещи, которые, как вы считали, будут работать легко, вы испытываете настоящий шок с точки зрения объема работы, которая действительно необходима.
Если вы когда-либо использовать форму from module import afunction
, то вы почти обеспечили reload
не будет работать: вы должны исключительно импорт модулей никогда функции, классы и т.д., из внутренних модулей, если вы хотите иметь любая надежда reload
делать что-то полезное все (в противном случае вам придется каким-то образом преследовать все кусочки и кусочки, импортированные здесь и там из модуля, и перепроверять каждый из них - eep ;-). Обратите внимание, что я предпочитаю следовать этому правилу в любом случае, планирую ли я перезагружать или нет, но при перезагрузке это решающее значение.
Сложная проблема: если у вас есть живые в любом месте экземпляры классов, существовавшие в предыдущей версии модуля, то reload
сам по себе ничего не сделает для обновления этих экземпляров. То, что проблема действительно тяжелая; один из самых длинных, самых сложных рецептов в Cookbook Python (2-е издание) - все о том, как закодировать свои модули для поддержки такой «перезагрузки, которая фактически обновляет существующие экземпляры». Это имеет значение только в том случае, если вы программируете в стиле ООП, конечно, но ... любой программный комплекс Python, достаточный для того, чтобы обладать функциональностью «перезагрузить этот плагин», - очень, вероятно, в нем много ООП, так что это едва ли второстепенная проблема.
docs for reload довольно полные и упоминают эту проблему, но не дают никаких подсказок, как ее решить. This recipe Майкл Хадсон из Python Cookbook онлайн, это лучше, но это только начало того, что мы превратили в печатное (2-е издание) - рецепт 20.15, онлайн-версия которого - here (неполная, если вы не подписаны на бесплатное ограниченное время просмотра коммерческого онлайн-сервиса O'Reilly's).
Возможно, возможно реализовать ограниченную «перезагрузку» только для модулей, которые OP заинтересован в использовании некоторых API-интерфейсов доморощенного. –