From 6af744da82f288ce79ab545386217ddf44b505f1 Mon Sep 17 00:00:00 2001 From: David Marteau Date: Tue, 23 Apr 2019 23:11:57 +0200 Subject: [PATCH] Remove plugin module path when unloading Unloading plugin must remove added module path in order to prevent wrong package import when reloading --- python/utils.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/python/utils.py b/python/utils.py index 8495bbefa07c..9009c66cd0b3 100644 --- a/python/utils.py +++ b/python/utils.py @@ -28,7 +28,7 @@ """ -from qgis.PyQt.QtCore import QCoreApplication, QLocale, QThread +from qgis.PyQt.QtCore import QCoreApplication, QLocale, QThread, qDebug from qgis.PyQt.QtWidgets import QPushButton, QApplication from qgis.core import Qgis, QgsMessageLog, qgsfunction, QgsMessageOutput from qgis.gui import QgsMessageBar @@ -452,12 +452,23 @@ def _unloadPluginModules(packageName): if hasattr(sys.modules[mod], 'qCleanupResources'): sys.modules[mod].qCleanupResources() except: - pass + # Print stack trace for debug + qDebug("qCleanupResources error:\n%s" % traceback.format_exc()) + + # try removing path + if hasattr(sys.modules[mod], '__path__'): + for path in sys.modules[mod].__path__: + try: + sys.path.remove(path) + except ValueError: + # Discard if path is not there + pass + # try to remove the module from python try: del sys.modules[mod] except: - pass + qDebug("Error when removing module:\n%s" % traceback.format_exc()) # remove the plugin entry del _plugin_modules[packageName]