& Ldquo; scipy.optimize.minimize & Rdquo; игнорирует ограничение, деривация везде положительна

reload(module), но только если он полностью автономный. Если что-либо еще имеет ссылку на модуль (или любой объект, принадлежащий модулю), тогда вы получите тонкие и любопытные ошибки, вызванные тем, что старый код висит дольше, чем вы ожидали, и такие вещи, как isinstance, не работают с разными версии одного и того же кода.

Если у вас есть односторонние зависимости, вы также должны перезагрузить все модули, зависящие от перезагруженного модуля, чтобы избавиться от всех ссылок на старый код. И затем перезагружайте модули, которые зависят от перезагруженных модулей, рекурсивно.

Если у вас есть циклические зависимости, которые очень распространены, например, когда вы имеете дело с перезагрузкой пакета, вы должны выгрузить все модули в группе за один присест. Вы не можете сделать это с помощью reload(), поскольку он будет повторно импортировать каждый модуль до того, как его зависимости будут обновлены, что позволит использовать старые ссылки для ползучести в новые модули.

Единственный способ сделать это в этом случае это взломать sys.modules, что является неподдерживаемым. Вам нужно будет пройти и удалить каждую запись sys.modules, которую вы хотели бы перезагрузить при следующем импорте, а также удалить записи, значения которых None для решения проблемы с реализацией, связанной с кэшированием, при неудачном относительном импорте. Это не очень приятно, но пока у вас есть полностью автономный набор зависимостей, который не оставляет ссылки за пределами его кодовой базы, он работоспособен.

Вероятно, лучше всего перезапустить сервер. : -)

1
задан rpanai 3 March 2019 в 11:47
поделиться