diff --git a/clearml/backend_interface/task/repo/scriptinfo.py b/clearml/backend_interface/task/repo/scriptinfo.py index 30f2a850..1cd29009 100644 --- a/clearml/backend_interface/task/repo/scriptinfo.py +++ b/clearml/backend_interface/task/repo/scriptinfo.py @@ -563,8 +563,15 @@ class _JupyterObserver(object): reqs = ReqsModules() for name in fmodules: if name in installed_pkgs: - pkg_name, version = installed_pkgs[name] - reqs.add(pkg_name, version, fmodules[name]) + # handle namespace packages, which are returned as flat dicts of format + # {mapping_pkg_name: (pkg_name, version), ...} + if isinstance(installed_pkgs[name], dict): + for subpackage_name, subpackage in installed_pkgs[name].items(): + pkg_name, version = subpackage + reqs.add(pkg_name, version, fmodules.get(subpackage_name, fmodules[name])) + else: + pkg_name, version = installed_pkgs[name] + reqs.add(pkg_name, version, fmodules[name]) requirements_txt, conda_requirements = ScriptRequirements.create_requirements_txt(reqs) # remove ipython direct access from the script code