Reload modified 2.80 Blender Add-on

I started working on my first Blender add-on for 2.80 and quickly wondered: how do I reload my blender add-on without restarting Blender!? After spending roughly a day researching on how to reload I was able to just hit a key (F8) inside Blender to reload the add-on.

After searching and testing on different approaches for reloading I came across this post: https://developer.blender.org/T67387 . I had gone through many of their steps in trying to figure out how to reload the add-ons :).

The solution:

Two steps are required to easily reload the add-on.
One is setting up the reload key binding because reload scripts action is unbound.
The other one is writing the proper reload code in the __init__.py file.

Reload keybinding (F8)

Adding the new key binding wasn't very intuitive but these are the steps to add the script.reload keybinding: Edit -> Preferences -> Keymap -> Expand Screen -> Expand Screen (Global) -> Add New -> Expand the new action (none) -> set action as "script.reload" -> set key binding. -> You're done!! I set the binding to F8 because that's what many other solutions for 2.79 etc mentioned.

__init__.py

This was the difficult part because many of the things I tried like just using importlib to reload the modules didn't work. But that post from blender forums did something I hadn't seen before in any other post. It used an if statement if bpy existed in locals. Here is how the code looked like for my test add-on when I solved the reload problem:


# Check if this add-on is being reloaded
if "bpy" in locals():
    # reloading .py files
    import importlib

    from . import nuu_menu_panel
    importlib.reload(nuu_menu_panel)
    from . import nuu_menu_open_op
    importlib.reload(nuu_menu_open_op)
# or if this is the first load of this add-on
else:
    import bpy
    from . import nuu_menu_panel
    from . import nuu_menu_open_op

bl_info = {
    "name": "Nuu Test",
    "author": "Luna",
    "version": (0, 0, 1),
    "blender": (2, 80, 0),
    "category": "Generic",
    "location": "View3D",
}

classes = (nuu_menu_panel.NUU_PT_menuPanel, nuu_menu_open_op.NUU_OT_menuOpenOperator)

register, unregister = bpy.utils.register_classes_factory(classes)

# This allows you to run the script directly from Blender's Text editor
# to test the add-on without having to install it.
if __name__ == "__main__":
    register()

After doing these two things you should be able to just reload the add-on with the click of a button.

More reading

Other Blender Add-on related blog posts by me that may be of interest:

No comments:

Post a Comment