2 minutes
Putting Maya back to it’s start up state, for Python’s sake
I happened upon this post by Nick Rodgers: https://medium.com/@nicholasRodgers/sidestepping-pythons-reload-function-without-restarting-maya-2448bab9476eIt deletes the previous imports so they’ll get imported freshly every time. Just posting it here in case I’ll need it again and can’t find the post anymore.
import inspect
from os.path import dirname
import sys
# I'm going to define this little function to make this cleaner
# It's going to have a flag to let you specify the userPath you want to clear out
# But otherwise I'd going to assume that it's the userPath you're running the script from (__file__)
def resetSessionForScript(userPath=None):
if userPath is None:
userPath = dirname(__file__)
# Convert this to lower just for a clean comparison later
userPath = userPath.lower()
print userPath
toDelete = []
# Iterate over all the modules that are currently loaded
for key, module in sys.modules.iteritems():
# There's a few modules that are going to complain if you try to query them
# so I've popped this into a try/except to keep it safe
try:
# Use the "inspect" library to get the moduleFilePath that the current module was loaded from
moduleFilePath = inspect.getfile(module).lower()
# Don't try and remove the startup script, that will break everything
if moduleFilePath == __file__.lower():
continue
# If the module's filepath contains the userPath, add it to the list of modules to delete
if moduleFilePath.startswith(userPath):
print "Removing %s" % key
toDelete.append(key)
except:
pass
# If we'd deleted the module in the loop above, it would have changed the size of the dictionary and
# broken the loop. So now we go over the list we made and delete all the modules
for module in toDelete:
del (sys.modules[module])
Read other posts