Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5.1.0 crashes with KeyError 'preferences' #16117

Closed
hdino opened this issue Aug 2, 2021 · 12 comments
Closed

5.1.0 crashes with KeyError 'preferences' #16117

hdino opened this issue Aug 2, 2021 · 12 comments

Comments

@hdino
Copy link

hdino commented Aug 2, 2021

Problem Description

Spyder won't start due to a plugin KeyError. A spyder --reset doesn't solve the problem.

What steps reproduce the problem?

Start spyder 5.1.0 or git 48b9305.

What is the expected output? What do you see instead?

Spyder should start successfully. Instead, the following errors are shown.

Paste Traceback/Error Below (if applicable)

Traceback (most recent call last):
  File "/home/USER/repos/spyder/spyder/app/utils.py", line 271, in create_window
    main.setup()
  File "/home/USER/repos/spyder/spyder/app/mainwindow.py", line 892, in setup
    PLUGIN_REGISTRY.register_plugin(self, PluginClass,
  File "/home/USER/repos/spyder/spyder/api/plugin_registration/registry.py", line 274, in register_plugin
    instance = self._instantiate_spyder5_plugin(
  File "/home/USER/repos/spyder/spyder/api/plugin_registration/registry.py", line 164, in _instantiate_spyder5_plugin
    self._notify_plugin_dependencies(plugin_name)
  File "/home/USER/repos/spyder/spyder/api/plugin_registration/registry.py", line 224, in _notify_plugin_dependencies
    plugin_instance._on_plugin_available(plugin)
  File "/home/USER/repos/spyder/spyder/api/plugin_registration/mixins.py", line 59, in _on_plugin_available
    method()
  File "/home/USER/repos/spyder/spyder/plugins/layout/plugin.py", line 142, in on_toolbar_available
    before_action = self.get_action(
  File "/home/USER/repos/spyder/spyder/api/widgets/mixins.py", line 506, in get_action
    return ACTION_REGISTRY.get_reference(name, plugin, context)
  File "/home/USER/repos/spyder/spyder/utils/registries.py", line 133, in get_reference
    plugin_contexts = self.registry_map[plugin]
KeyError: 'preferences'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/USER/.local/bin/spyder", line 33, in <module>
    sys.exit(load_entry_point('spyder', 'gui_scripts', 'spyder')())
  File "/home/USER/repos/spyder/spyder/app/start.py", line 226, in main
    mainwindow.main(options, args)
  File "/home/USER/repos/spyder/spyder/app/mainwindow.py", line 2114, in main
    mainwindow = create_window(MainWindow, app, splash, options, args)
  File "/home/USER/repos/spyder/spyder/app/utils.py", line 273, in create_window
    if main.console is not None:
  File "/home/USER/repos/spyder/spyder/app/mainwindow.py", line 1109, in __getattr__
    return self.get_plugin(self._INTERNAL_PLUGINS_MAPPING[attr])
  File "/home/USER/repos/spyder/spyder/app/mainwindow.py", line 166, in get_plugin
    raise SpyderAPIError(f'Plugin "{plugin_name}" not found!')
spyder.api.exceptions.SpyderAPIError: Plugin "internal_console" not found!

Versions

  • Spyder version: 5.1.0 and git 48b9305
  • Python version: 3.8.10
  • Qt version: 5.12.10
  • PyQt version: 5.12.3
  • Operating System name/version: Ubuntu 20.04
@Ustilago
Copy link

Ustilago commented Aug 2, 2021

Hi,

I'm having the same king of problem, but with KeyError: 'spyder_report_action' :

Traceback (most recent call last):
  File "/home/USER/src/spyder3/bin/spyder", line 8, in <module>
    sys.exit(main())
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/app/start.py", line 226, in main
    mainwindow.main(options, args)
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/app/mainwindow.py", line 2114, in main
    mainwindow = create_window(MainWindow, app, splash, options, args)
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/app/utils.py", line 271, in create_window
    main.setup()
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/app/mainwindow.py", line 892, in setup
    PLUGIN_REGISTRY.register_plugin(self, PluginClass,
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 274, in register_plugin
    instance = self._instantiate_spyder5_plugin(
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 164, in _instantiate_spyder5_plugin
    self._notify_plugin_dependencies(plugin_name)
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 224, in _notify_plugin_dependencies
    plugin_instance._on_plugin_available(plugin)
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/api/plugin_registration/mixins.py", line 59, in _on_plugin_available
    method()
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/plugins/application/plugin.py", line 67, in on_console_available
    report_action = self.get_action(ConsoleActions.SpyderReportAction)
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/api/widgets/mixins.py", line 506, in get_action
    return ACTION_REGISTRY.get_reference(name, plugin, context)
  File "/home/USER/src/spyder3/lib/python3.9/site-packages/spyder/utils/registries.py", line 135, in get_reference
    return context_references[id_]
  File "/usr/lib/python3.9/weakref.py", line 134, in __getitem__
    o = self.data[key]()
KeyError: 'spyder_report_action'

I installed Spyder from pip install in a virtualenv.

Versions

  • Spyder version: 5.1.0 from pip
  • Python version: 3.9.2
  • Qt version: 5.15.2
  • PyQt version: 5.15.2
  • Operating System name/version: Debian Sid

gentoo-bot pushed a commit to gentoo/gentoo that referenced this issue Aug 2, 2021
No keywords until spyder-ide/spyder#16117
is resolved.

Package-Manager: Portage-3.0.20, Repoman-3.0.3
Signed-off-by: Andrew Ammerlaan <andrewammerlaan@gentoo.org>
@AndrewAmmerlaan
Copy link

AndrewAmmerlaan commented Aug 2, 2021

Same issue on Gentoo Linux, slightly different traceback:

Traceback (most recent call last):
File "/usr/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 157, in <lambda>
lambda: self.notify_plugin_availability(
File "/usr/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 318, in notify_plugin_availability
plugin_instance._on_plugin_available(plugin_name)
File "/usr/lib/python3.9/site-packages/spyder/api/plugin_registration/mixins.py", line 59, in _on_plugin_available
method()
File "/usr/lib/python3.9/site-packages/spyder/plugins/tours/plugin.py", line 61, in on_main_menu_available
docs_action = self.get_action(
File "/usr/lib/python3.9/site-packages/spyder/api/widgets/mixins.py", line 506, in get_action
return ACTION_REGISTRY.get_reference(name, plugin, context)
File "/usr/lib/python3.9/site-packages/spyder/utils/registries.py", line 133, in get_reference
plugin_contexts = self.registry_map[plugin]
KeyError: 'application'
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.9/spyder", line 33, in <module>
sys.exit(load_entry_point('spyder==5.1.0', 'gui_scripts', 'spyder')())
File "/usr/lib/python3.9/site-packages/spyder/app/start.py", line 226, in main
mainwindow.main(options, args)
File "/usr/lib/python3.9/site-packages/spyder/app/mainwindow.py", line 2114, in main
mainwindow = create_window(MainWindow, app, splash, options, args)
File "/usr/lib/python3.9/site-packages/spyder/app/utils.py", line 271, in create_window
main.setup()
File "/usr/lib/python3.9/site-packages/spyder/app/mainwindow.py", line 892, in setup
PLUGIN_REGISTRY.register_plugin(self, PluginClass,
File "/usr/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 274, in register_plugin
instance = self._instantiate_spyder5_plugin(
File "/usr/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 164, in _instantiate_spyder5_plugin
self._notify_plugin_dependencies(plugin_name)
File "/usr/lib/python3.9/site-packages/spyder/api/plugin_registration/registry.py", line 224, in _notify_plugin_dependencies
plugin_instance._on_plugin_available(plugin)
File "/usr/lib/python3.9/site-packages/spyder/api/plugin_registration/mixins.py", line 59, in _on_plugin_available
method()
File "/usr/lib/python3.9/site-packages/spyder/plugins/application/plugin.py", line 67, in on_console_available
report_action = self.get_action(ConsoleActions.SpyderReportAction)
File "/usr/lib/python3.9/site-packages/spyder/api/widgets/mixins.py", line 506, in get_action
return ACTION_REGISTRY.get_reference(name, plugin, context)
File "/usr/lib/python3.9/site-packages/spyder/utils/registries.py", line 135, in get_reference
return context_references[id_]
File "/usr/lib/python3.9/weakref.py", line 134, in __getitem__
o = self.data[key]()
KeyError: 'spyder_report_action'
  • Spyder version 5.1.0 (self-packaged, I am the ebuild maintainer for Spyder on Gentoo Linux)
  • Spyder-kernel version 2.1.0
  • Python-lsp-server version 1.2.0
  • Python version 3.9.6
  • Qt version 5.15.2
  • PyQt5 version 5.15.4
  • OS: Gentoo Linux

Resetting the configuration does not fix the problem, nor does uninstalling all plug-ins.

@a-allard
Copy link

a-allard commented Aug 2, 2021

Similar issue slightly different traceback.

Traceback (most recent call last):
  File "/home/allard/pymain/bin/spyder", line 8, in <module>
    sys.exit(main())
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/start.py", line 226, in main
    mainwindow.main(options, args)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 2114, in main
    mainwindow = create_window(MainWindow, app, splash, options, args)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/utils.py", line 271, in create_window
    main.setup()
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 892, in setup
    PLUGIN_REGISTRY.register_plugin(self, PluginClass,
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 274, in register_plugin
    instance = self._instantiate_spyder5_plugin(
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 164, in _instantiate_spyder5_plugin
    self._notify_plugin_dependencies(plugin_name)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 224, in _notify_plugin_dependencies
    plugin_instance._on_plugin_available(plugin)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/mixins.py", line 59, in _on_plugin_available
    method()
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/plugins/tours/plugin.py", line 61, in on_main_menu_available
    docs_action = self.get_action(
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/widgets/mixins.py", line 506, in get_action
    return ACTION_REGISTRY.get_reference(name, plugin, context)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/utils/registries.py", line 133, in get_reference
    plugin_contexts = self.registry_map[plugin]
KeyError: 'application'

I launched spyder from terminal as it crashes part way through opening.

  • Spyder 5.1.0 (fresh install with pip)
  • pyqt5 5.12.3
  • OS: Ubuntu 20.04

@mscheltienne
Copy link

Similar issue with different traceback on macOS 11.4 with Python 3.8.10:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 157, in <lambda>
    lambda: self.notify_plugin_availability(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 318, in notify_plugin_availability
    plugin_instance._on_plugin_available(plugin_name)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/api/plugin_registration/mixins.py", line 59, in _on_plugin_available
    method()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/plugins/tours/plugin.py", line 61, in on_main_menu_available
    docs_action = self.get_action(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/api/widgets/mixins.py", line 506, in get_action
    return ACTION_REGISTRY.get_reference(name, plugin, context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/utils/registries.py", line 133, in get_reference
    plugin_contexts = self.registry_map[plugin]
KeyError: 'application'
<class 'spyder.plugins.editor.plugin.Editor'>: 'Editor' object has no attribute 'get_description'
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 924, in setup
    description = plugin_instance.get_description()
AttributeError: 'Editor' object has no attribute 'get_description'
<class 'spyder.plugins.ipythonconsole.plugin.IPythonConsole'>: 'IPythonConsole' object has no attribute 'get_description'
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 924, in setup
    description = plugin_instance.get_description()
AttributeError: 'IPythonConsole' object has no attribute 'get_description'
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/bin/spyder", line 8, in <module>
    sys.exit(main())
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/app/start.py", line 226, in main
    mainwindow.main(options, args)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 2114, in main
    mainwindow = create_window(MainWindow, app, splash, options, args)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/app/utils.py", line 282, in create_window
    main.post_visible_setup()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 1194, in post_visible_setup
    plugin.on_mainwindow_visible()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/plugins/mainmenu/plugin.py", line 72, in on_mainwindow_visible
    menu._render()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/spyder/api/widgets/menus.py", line 179, in _render
    section, before_section = next(iter_sections)
StopIteration

@ccordoba12
Copy link
Member

ccordoba12 commented Aug 2, 2021

Hey eveyone, thanks for reporting. I'm taking a look at this problem and will try to release 5.1.1 with a fix for it as soon as possible.

Thanks for your patience.

@mrclary
Copy link
Contributor

mrclary commented Aug 2, 2021

@ccordoba12, the first traceback for @mscheltienne, @a-allard, and @AndrewAmmerlaan, are result of an undeclared dependency on the Application plugin in the Tours plugin.

OPTIONAL = [Plugins.MainMenu]

@on_plugin_available(plugin=Plugins.MainMenu)
def on_main_menu_available(self):
mainmenu = self.get_plugin(Plugins.MainMenu)
docs_action = self.get_action(
ApplicationActions.SpyderDocumentationAction,
plugin=Plugins.Application)
mainmenu.add_item_to_application_menu(
self.get_container().tour_action,
menu_id=ApplicationMenus.Help,
section=HelpMenuSections.Documentation,
before=docs_action)

Note the dependency on line 63.

#16127 will fix these issues. The OP may have similar solution.

@a-allard
Copy link

a-allard commented Aug 2, 2021

@mrclary

That was indeed part of the issue.

I have a different traceback now:

Traceback (most recent call last):
  File "/home/allard/pymain/bin/spyder", line 8, in <module>
    sys.exit(main())
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/start.py", line 226, in main
    mainwindow.main(options, args)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 2114, in main
    mainwindow = create_window(MainWindow, app, splash, options, args)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/utils.py", line 271, in create_window
    main.setup()
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/app/mainwindow.py", line 892, in setup
    PLUGIN_REGISTRY.register_plugin(self, PluginClass,
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 274, in register_plugin
    instance = self._instantiate_spyder5_plugin(
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 164, in _instantiate_spyder5_plugin
    self._notify_plugin_dependencies(plugin_name)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/registry.py", line 224, in _notify_plugin_dependencies
    plugin_instance._on_plugin_available(plugin)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/plugin_registration/mixins.py", line 59, in _on_plugin_available
    method()
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/plugins/application/plugin.py", line 67, in on_console_available
    report_action = self.get_action(ConsoleActions.SpyderReportAction)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/api/widgets/mixins.py", line 506, in get_action
    return ACTION_REGISTRY.get_reference(name, plugin, context)
  File "/home/allard/pymain/lib/python3.8/site-packages/spyder/utils/registries.py", line 135, in get_reference
    return context_references[id_]
  File "/usr/lib/python3.8/weakref.py", line 131, in __getitem__
    o = self.data[key]()
KeyError: 'spyder_report_action'

@a-allard
Copy link

a-allard commented Aug 3, 2021

Digging in a bit further into the second error I found I could spyder to start if I modified registery.py (api/plugin_registration/registry.py) line 222 to be:

if self.plugin_availability.get(plugin, False) and plugin_name != 'application':

It was:

if self.plugin_availability.get(plugin, False):

I don't know why this works I just know it gets spyder running on my machine.

@mrclary
Copy link
Contributor

mrclary commented Aug 3, 2021

@ccordoba12, #16130 appears to resolve all issues that I ran into for the macOS application.

@ccordoba12
Copy link
Member

Great! I'm really glad to hear that.

@AndrewAmmerlaan
Copy link

5.1.1 works! Thanks for the quick fix.

@ccordoba12
Copy link
Member

Thanks for the confirmation @AndrewAmmerlaan!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants