{"record":{"id":"5d603758e8e4a5e6","repo":"nicolargo/glances","slug":"plugin-plugin-already-in-sys-modules-skipping","errorCode":null,"errorMessage":"Plugin {plugin} already in sys.modules, skipping (workaround: rename plugin)","messagePattern":"Plugin (.+?) already in sys\\.modules, skipping \\(workaround: rename plugin\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"glances/stats.py","lineNumber":223,"sourceCode":"            path = args.plugin_dir\n\n        # No additional plugin directory configured.\n        if not path:\n            return\n\n        # Store original sys.path so it can be restored after loading.\n        _sys_path = sys.path\n\n        # Used to measure plugin startup duration.\n        start_duration = Counter()\n\n        # Ensure plugins can be imported from the configured directory.\n        sys.path.insert(0, path)\n\n        for plugin in self._get_addl_plugins(path):\n            # Prevent duplicate imports for plugins already loaded.\n            if plugin in sys.modules:\n                logger.warn(f\"Plugin {plugin} already in sys.modules, skipping (workaround: rename plugin)\")\n                continue\n\n            start_duration.reset()\n            try:\n                # Dynamically import the plugin model module.\n                _mod_loaded = import_module(plugin + '.model')\n\n                # Create and register the plugin instance.\n                self._plugins[plugin] = _mod_loaded.PluginModel(args=args, config=config)\n                logger.debug(f\"Plugin {plugin} started in {start_duration.get()} seconds\")\n            except Exception as e:\n                # If a plugin can not be loaded, display a critical message\n                # on the console but do not crash\n                logger.critical(f\"Error while initializing the {plugin} plugin ({e})\")\n                logger.error(traceback.format_exc())\n                # An error occurred, disable the plugin\n                if args:\n                    setattr(args, 'disable_' + plugin, False)","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/nicolargo/glances/blob/a240d8dfb3105a38b5964357ec21768594b0e83e/glances/stats.py#L205-L241","documentation":"A logged warning (not a raised error) emitted while loading additional plugins from a configured directory: the plugin's module name already exists in sys.modules, so Glances skips importing it to avoid double-import side effects. The message suggests renaming the plugin as a workaround.","triggerScenarios":"Configuring additional plugin directories (--plugins-dir / plugin_path) that contain a plugin whose module name collides with a built-in or already-loaded one — e.g. a custom 'glances_plugin/foo' named the same as an existing plugin.","commonSituations":"Copying a stock plugin into a custom dir to modify it but keeping the module name; multiple plugin dirs containing same-named modules; iterating on plugins in the same interpreter/session.","solutions":["Rename the custom plugin's module (directory/package name) to something unique, as the message suggests","Remove the duplicate copy if the built-in already covers it","Verify only one plugin path supplies each name; check sys.modules keys if unsure","Restart glances after renaming so the old module isn't already cached"],"exampleFix":"# before\n# dir: glances_foo/ (collides with built-in 'glances_foo')\n# after\nmv glances_foo glances_foo_custom","handlingStrategy":"validation","validationCode":"import sys, pathlib\nnames = {p.name for p in pathlib.glob(plugin_dir)}\nclashes = names & set(sys.modules)\nif clashes:\n    raise SystemExit(f'rename plugins to avoid collisions: {clashes}')","typeGuard":"def plugin_name_free(name: str) -> bool:\n    import sys\n    return name not in sys.modules","tryCatchPattern":null,"preventionTips":["Give custom plugins unique module names distinct from built-ins","Don't copy stock plugins into --plugins-dir without renaming","Restart glances after renaming plugins so sys.modules is clean"],"tags":["glances","plugin","duplicate-module","sys-modules","warning"],"backgroundTag":"duplicate-module-name","analyzedSha":"a240d8dfb3105a38b5964357ec21768594b0e83e","analyzedAt":"2026-08-27T19:15:19.178Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}