From d8dd79f3ba50ec506df5bd0f8c4406e6e2513cc9 Mon Sep 17 00:00:00 2001 From: Rodrigo Farnham Date: Fri, 29 Jan 2016 15:19:08 -0800 Subject: [PATCH] use custom logic in lieu of imp.find_module to properly follow subimports. For example sklearn.tree was spuriously treated as a dynamic module. --- cloudpickle/cloudpickle.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cloudpickle/cloudpickle.py b/cloudpickle/cloudpickle.py index 8d5ffe40e..62b131bfd 100644 --- a/cloudpickle/cloudpickle.py +++ b/cloudpickle/cloudpickle.py @@ -135,8 +135,16 @@ def save_module(self, obj): """ Save a module as an import """ + mod_name = obj.__name__ + path = None + + # Use find_module with each piece to follow subimports + # If module is successfully found then it is not a dynamically created module try: - imp.find_module(obj.__name__) + for part in mod_name.split('.'): + if path is not None: + path = [path] + _, path, _ = imp.find_module(part, path) is_dynamic = False except ImportError: is_dynamic = True