Blender Python – Force reload of module while importing all its classes

Question:

I am developing in Python/Blender, and have two needs here:

  1. Import all the individual classes from my module (because they must each be registered with blender)
  2. Reload the module itself each time the script is executed (to prevent caching while I’m developing the plugin and press "reload scripts")

Currently I am doing this (in __init__.py):

from importlib import reload
from .MyPlugin import *

reload(MyPlugin)

classes = [ClassA, ClassB, ClassC]
# register each class, not shown here

However the reload(MyPlugin) line causes an error: "MyPlugin is not defined".

Originally I tried reloading each of the classes instead, but it raised an error that reload expects a module.

Asked By: max pleaner

||

Answers:

Some colleagues helped me with an answer, what ended up working was this in __init__.py:

from importlib import reload

if "MyModule" in locals():
    reload(MyModule)
else:
   import MyModule

from .MyModule import *

This is detailed here: https://blenderartists.org/t/how-to-reload-add-on-code/1202715/2

Answered By: max pleaner

this works with older Version (tested with 2.79)
Restart first!

del sys.modules['foo']    
from foo import *
Answered By: dazzafact
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.