Source code for radical.utils.stack


import os
import sys
import glob

from .misc    import as_list
from .shell   import sh_callout
from .modules import import_module


# ------------------------------------------------------------------------------
#
[docs]def stack(ns='radical'): ''' returns a dict with information about the currently active python interpreter and all radical modules (incl. version details) ''' exe = sh_callout('which python3', shell=True)[0].strip() ret = {'sys' : {'python' : exe, 'version' : sys.version.split()[0], 'pythonpath' : os.environ.get('PYTHONPATH', ''), 'virtualenv' : os.environ.get('VIRTUAL_ENV', '') or os.environ.get('CONDA_DEFAULT_ENV','')}, } for namespace in as_list(ns): ret[namespace] = dict() ns_mod = import_module(namespace) path = ns_mod.__path__ if isinstance(path, list): path = path[0] if isinstance(path, str): rpath = path else: rpath = path._path # pylint: disable=W0212 if isinstance(rpath, list): rpath = rpath[0] for mpath in glob.glob('%s/*' % rpath): if os.path.isdir(mpath): mbase = os.path.basename(mpath) mname = '%s.%s' % (namespace, mbase) if mbase.startswith('_'): continue try: mod = import_module(mname) version = getattr(mod, 'version') version_detail = getattr(mod, 'version_detail') if version_detail: ret[namespace][mname] = version_detail else: ret[namespace][mname] = version except Exception as e: ret[namespace][mname] = 'Error: %s' % str(e) return ret
# ------------------------------------------------------------------------------