diff --git a/cloudpickle/cloudpickle.py b/cloudpickle/cloudpickle.py index d6c140871..d168fcca2 100644 --- a/cloudpickle/cloudpickle.py +++ b/cloudpickle/cloudpickle.py @@ -508,6 +508,7 @@ def save_function_tuple(self, func): save(f_globals) save(defaults) save(dct) + save(func.__module__) save(closure_values) write(pickle.TUPLE) write(pickle.REDUCE) # applies _fill_function on the tuple @@ -1001,13 +1002,14 @@ def __reduce__(cls): return cls.__name__ -def _fill_function(func, globals, defaults, dict, closure_values): +def _fill_function(func, globals, defaults, dict, module, closure_values): """ Fills in the rest of function data into the skeleton function object that were created via _make_skel_func(). """ func.__globals__.update(globals) func.__defaults__ = defaults func.__dict__ = dict + func.__module__ = module cells = func.__closure__ if cells is not None: diff --git a/tests/cloudpickle_test.py b/tests/cloudpickle_test.py index 3963e49e3..db3ce57dc 100644 --- a/tests/cloudpickle_test.py +++ b/tests/cloudpickle_test.py @@ -697,5 +697,9 @@ def f(): result = g() self.assertEqual(1, result) + def test_function_module_name(self): + func = lambda x: x + self.assertEqual(pickle_depickle(func).__module__, func.__module__) + if __name__ == '__main__': unittest.main()