Page MenuHome

Please describe how to make add-on development more efficent (e.g. reloading)
Open, Needs Triage by DeveloperPublic

Description

Problem

No clear documentation on how to setup an efficient development environment and reload an add-on during development, leading to slow and frustrating experiences by newer add-on developers.

Explanation

Imagine being a new add-on developer who just finished the Add-on Tutorial (https://docs.blender.org/manual/en/dev/advanced/scripting/addon_tutorial.html#intended-audience). You wrote a .py file and wonder, do I really need to add every .py file through Preferences ‣ Add-ons ‣ Install…?

  • Please mention that you can set a default script location with: Edit ‣ Preferences ‣ File Paths ‣ Data ‣ Scripts.

Next, we realize you rather write "create blocks" as "Create Blockies", but wait, or add-on is already loaded. How do I reload the add-on? Do I really have to close Blender every time? With your Google skills (https://blender.stackexchange.com/questions/2691/is-there-a-way-to-restart-a-modified-addon) you find that F8 should reload all add-ons... except it doesn't, because that's for 2.79. Luckily you read through the comments and realize you have to go through the painful process of searching for F3 -> reload scripts -> enter every time we need to reload a change. In the other answer you find bpy.ops.wm.addon_enable(module='your_module_name') for in the Blender terminal, which might be slightly faster (just arrow-up -> enter). You continue for a while and started to make a multi-file add-on. Suddenly your code shortcut doesn't reload every change you make? After some experimenting you find out that only changes in __init__.py are noticed, so you go to (https://blender.chat/channel/python) and ask what is wrong (https://blender.chat/channel/python?msg=fGEyJtjNZqfpApxQ5). Which doesn't solve your issue, so you dive in the code of `bpy.ops.wm.addon_enable() and make an issue about it (https://developer.blender.org/T66924). There, someone points out that actually bpy.ops.script.reload() is the right code command, not bpy.ops.wm.addon_enable(module='your_module_name')

  • Please mention that you can reload ALL add-ons with F3 -> reload scripts -> enter or the correct code line bpy.ops.script.reload().

You hear you can set a keyboard shortcut for reload, so you find an image about it (https://devtalk.blender.org/t/reload-button-in-2-8/1708). The image there doesn't tell you how to set the keyboard shortcut and Preferences -> Keymap -> Search -> "reload script" doesn't show up anything. So you Google now: "Blender 2.8 how to add a new shortcut", which shows only "Blender 2.8 changed these shortcuts!", so you add "your own", only to find this page saying it has not been implemented yet (https://blender.stackexchange.com/questions/124475/blender-2-8-how-to-add-a-new-shortcut). Then in a 2.79 YouTube video you find you first have to collapse a line (e.g. Screen -> Global where a button Add New shows up.

  • Please include in the docs how to set a keyboard shortcut for add-on reloading: Preferences -> Keymap -> Screen -> Screen (Global) -> Add New -> collapse -> see image.

  • Please also include (a link to) how to setup an IDE to develop your add-ons with.

Add-on reloading

Please also include that the beginning of your file needs a structure like this if you want to reload add-ons:

# Check if this add-on is being reloaded
if "bpy" in locals():
    # reloading .py files
    import importlib
    # from . blendzmq_props import ZMQSocketProperties
    # importlib.reload(ZMQSocketProperties)
    # from . blendzmq_panel import BLENDZMQ_PT_zmqConnector
    # importlib.reload(BLENDZMQ_PT_zmqConnector)

    from . import addon_props  # addon_props.py (properties are created here)
    importlib.reload(addon_props)  # does this file need a def register() / def unregister() for the classes inside?
    from . import addon_panel  # addon_panel.py (panel interface classes are created here)
    importlib.reload(addon_panel)
# or if this is the first load of this add-on
else:
    print("importing .py files")
    import bpy
    from . import addon_props
    from . import addon_panel

Request

By reading this, you might have noticed that getting into efficient Blender add-on development is quite frustrating with the current documentation. Please make an extra page about how to setup you add-on development environment, using the bullet points above, here: https://docs.blender.org/manual/en/dev/advanced/scripting/addon_tutorial.html#intended-audience

Details

Type
To Do

Event Timeline

Iemand Iets (NumesSanguis) renamed this task from Please describe how to make add-on development more efficent to Please describe how to make add-on development more efficent (e.g. reloading).Jul 21 2019, 4:35 PM

Just a quick note, addon reloading can also be done differently. This Visual Studio code extension does the reloading automatically: https://marketplace.visualstudio.com/items?itemName=JacquesLucke.blender-development

Personally, I'm not really a big fan of the reloading code you mention, but yeah, it is used in many addons...