I want to check if an addon exists and if it is enabled. So i tried:
loaded_default, loaded_state = addon_utils.check(addon_name)
But i found that i can not distinguish between the 2 cases:
- Addon is not installed
- Addon is not enabled
So in the case where i want to programmatically enable an addon, i can only do:
addon_name="myaddon" default, state = addon_utils.check(addon_name) print ("%s: default:%s, state:%s" % (addon_name, default, state) ) if default == False and state is None: print("%s is not installed or not enabled by default" % addon_name) if state != True : print("Try to enable module %s On The Fly ..." % addon_name ) try: mod = addon_utils.enable(addon_name, default_set=False, persistent=True) if mod: state = True except: print("Could not enable %s on the fly. Ignore" % addon_name )
But this is ugly. Especially when the module does not exist then i get a stack trace in the console, even when i use a try/except block. For the the example above i get this in the console:
myaddon: default:False, state:None myaddon is not installed or not enabled by default Try to enable module myaddon On The Fly ... Traceback (most recent call last): File "D:\blendergit\cmake-build\bin\Release\2.71\scripts\modules\addon_utils.py", line 299, in enable mod = __import__(module_name) ImportError: No module named 'myaddon'
Is it possible to make this more elegant and avoid to see the stack trace when the child addon does not exist ?