Howdy, In my app I need to exec user text that defines a function. I want this function to unpickle an object. Pickle breaks because it is looking for the object definition that isn't in the calling namespace.
I have mocked up a simple example that shows the problem. Run this first code (from create_pickle.py) to create the pickle. create_pickle.py: (run this first) ############################################# import cPickle # the pickle file name file_name = 'd:\\temp\\test1.pickle' # define a class class Tree(object): pass def main(): # instantiate t = Tree() # create the sweet pickle fp = open(file_name, 'wb') cPickle.dump(t, fp) fp.close() # try to unpickle directly fp = open(file_name, 'rb') result = cPickle.load(fp) fp.close() print "unpickling directly works just fine, result = ", result if __name__=='__main__': main() ############################################# run this second: exec_pickle.py ############################################# # this file shows a problem with sweet pickle in an exec statement # the pickle file name file_name = 'd:\\temp\\test1.pickle' # code to be turned into a function code_text = ''' def include(): print "this works!" ''' # a function for creating functions def create_fun(code_text): clean_dict = {} exec code_text in clean_dict return clean_dict['include'] # include_fun is a bona fide function include_fun = create_fun(code_text) # this works include_fun() # now try to load the pickle in an exec statement code_text = ''' def include(file_name): print "processing file_name: ", file_name import cPickle fp = open(file_name, "rb") result = cPickle.load(fp) fp.close() print "result = ", result ''' # create the new include_fun include_fun = create_fun(code_text) # run it include_fun(file_name) ############################################# Can anyone enlighten me what I need to do to exec_pickle.py to get this to work? thanks, Danny -- http://mail.python.org/mailman/listinfo/python-list