Omer Korat wrote: > I'm working on a project in Python 2.7. I have a few large objects, and I > want to save them for later use, so that it will be possible to load them > whole from a file, instead of creating them every time anew. It is > critical that they be transportable between platforms. Problem is, when I > use the 2.7 pickle module, all I get is a file containing a string > representing the commands used to create the object. But there's nothing I > can do with this string, because it only contains information about the > object's module, class and parameters. And that way, they aren't > transportable. In python 3.3 this problem is solved, and the pickle.dump > generates a series of bytes, which can be loaded in any other module > independently of anything. But in my project, I need NLTK 2.0, which is > written in python 2.7... > > Anybody has suggestions? Maybe there is a way to use pickle so that it > yields the results I need? Or is there any other module that does pickle's > job? Or perhaps there is a way to mechanically translate between python > versions, so I'll be able to use pickle from 3.3 inside an application > written in 2.7? Or perhaps somebody knows of a way to embed a piece of 3.3 > code inside a 2.7 program? > > It can't be I'm the only one who wants to save python objects for later > use! There must be a standard method to do this, but I couldn't find any > on the web! If someone can solve this for me I'll be so grateful.
Pickling works the same way in Python 2 and Python 3. For classes only the names are dumped, so you need (the same version of) NLTK on the source and the destination platform. If you can provide a short demo of what works in Python 3 but fails in Python 2 we may be able to find the actual problem or misunderstanding. Maybe it is just that different protocols are used by default? I so, try with open(filename, "wb") as f: pickle.dump(f, your_data, protocol=pickle.HIGHEST_PROTOCOL) -- http://mail.python.org/mailman/listinfo/python-list