def loaded_vispy_modules(import_module, depth=None, all_modules=False): """ Import the given module in subprocess and return loaded modules Import a certain module in a clean subprocess and return the vispy modules that are subsequently loaded. The given depth indicates the module level (i.e. depth=1 will only yield 'vispy.app' but not 'vispy.app.backends'). """ vispy_dir = os.path.dirname(os.path.dirname(vispy.__file__)) # Get the loaded modules in a clean interpreter code = "import sys, %s; print(', '.join(sys.modules))" % import_module res = run_subprocess([sys.executable, '-c', code], cwd=vispy_dir)[0] loaded_modules = [name.strip() for name in res.split(',')] if all_modules: return loaded_modules # Get only vispy modules at the given depth vispy_modules = set() for m in loaded_modules: if m.startswith('vispy') and '__future__' not in m: if depth: parts = m.split('.') m = '.'.join(parts[:depth]) vispy_modules.add(m) return vispy_modules