Blender Python – Force reload of module while importing all its classes
Question:
I am developing in Python/Blender, and have two needs here:
- Import all the individual classes from my module (because they must each be registered with blender)
- 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.
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
this works with older Version (tested with 2.79)
Restart first!
del sys.modules['foo']
from foo import *
I am developing in Python/Blender, and have two needs here:
- Import all the individual classes from my module (because they must each be registered with blender)
- 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.
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
this works with older Version (tested with 2.79)
Restart first!
del sys.modules['foo']
from foo import *