From: gerardob on 6 Apr 2010 13:23 Hello, I am new to python and i have a problem using the pickle load function. I have an object m of the class MarkovModel and i want to copy it to a file and load it onto another class: l=[1,2,3] m = markov_model.MarkovModel() m.load_observations(l) file = open("prueba.txt", 'w') pickle.dump(m,file,2) file.close() #m2 = markov_model.MarkovModel() file = open("prueba.txt", 'rb') m2 = pickle.load(file) (THIS IS LINE 36) The error below appears. In the case i remove the comment to initialize m2, the same thing happens. Any ideas on how to fix this? Thanks. Traceback (most recent call last): File "C:\Users\gberbeglia\Documents\python\scripting\mycodes\main.py", line 36, in <module> m2 = pickle.load(file) File "C:\Python26\lib\pickle.py", line 1370, in load return Unpickler(file).load() File "C:\Python26\lib\pickle.py", line 858, in load dispatch[key](self) File "C:\Python26\lib\pickle.py", line 1090, in load_global klass = self.find_class(module, name) File "C:\Python26\lib\pickle.py", line 1124, in find_class __import__(module) ImportError: No module named markov_model -- View this message in context: http://old.nabble.com/Pickle-problem-while-loading-a-class-instance.-tp28154964p28154964.html Sent from the Python - python-list mailing list archive at Nabble.com.
From: Peter Otten on 6 Apr 2010 14:02 gerardob wrote: > Hello, I am new to python and i have a problem using the pickle load > function. > I have an object m of the class MarkovModel and i want to copy it to a > file and load it onto another class: > > l=[1,2,3] > m = markov_model.MarkovModel() > m.load_observations(l) > file = open("prueba.txt", 'w') Remember to open the file in binary mode. > pickle.dump(m,file,2) > file.close() > > #m2 = markov_model.MarkovModel() > > file = open("prueba.txt", 'rb') > m2 = pickle.load(file) (THIS IS LINE 36) > > The error below appears. In the case i remove the comment to initialize > m2, the same thing happens. Any ideas on how to fix this? Add the directory containing the markov_model module to your PYTHONPATH environment variable or move the module into a directory where Python is already looking (C:/Python26/lib/site-packages or the per-user equivalent). See also http://docs.python.org/using/windows.html#finding-modules > Traceback (most recent call last): > File "C:\Users\gberbeglia\Documents\python\scripting\mycodes\main.py", > line 36, in <module> > m2 = pickle.load(file) > File "C:\Python26\lib\pickle.py", line 1370, in load > return Unpickler(file).load() > File "C:\Python26\lib\pickle.py", line 858, in load > dispatch[key](self) > File "C:\Python26\lib\pickle.py", line 1090, in load_global > klass = self.find_class(module, name) > File "C:\Python26\lib\pickle.py", line 1124, in find_class > __import__(module) > ImportError: No module named markov_model Peter
From: Lie Ryan on 6 Apr 2010 15:02 On 04/07/10 03:23, gerardob wrote: > The error below appears. In the case i remove the comment to initialize m2, > the same thing happens. Any ideas on how to fix this? > When unpickling a user-defined class, you unpickling module must have access to the original class definition. This means if you do this: # model.py class MyClass(object): pass # saver.py import pickle import model m = model.MyClass() pickle.dump(m, open('...', 'w')) Then the loader.py must be able to import model. If you do not explicitly import model, pickle will automatically try to `import model` from the standard module search path. # loader.py # the import must succeed, or pickle cannot find Foo's definition # # import model pickle.load(open('...'))
From: gerardob on 9 Apr 2010 17:42 I tried both things: 1- moved all the code to C:/Python26/lib/site-packages 2- Modified the PYTHONPATH in the windows registry. However, i stil have exactly the same error on the screen. Any other suggestions? Thanks. Peter Otten wrote: > > gerardob wrote: > >> Hello, I am new to python and i have a problem using the pickle load >> function. >> I have an object m of the class MarkovModel and i want to copy it to a >> file and load it onto another class: >> >> l=[1,2,3] >> m = markov_model.MarkovModel() >> m.load_observations(l) >> file = open("prueba.txt", 'w') > > Remember to open the file in binary mode. > >> pickle.dump(m,file,2) >> file.close() >> >> #m2 = markov_model.MarkovModel() >> >> file = open("prueba.txt", 'rb') >> m2 = pickle.load(file) (THIS IS LINE 36) >> >> The error below appears. In the case i remove the comment to initialize >> m2, the same thing happens. Any ideas on how to fix this? > > Add the directory containing the markov_model module to your PYTHONPATH > environment variable or move the module into a directory where Python is > already looking (C:/Python26/lib/site-packages or the per-user > equivalent). > > See also http://docs.python.org/using/windows.html#finding-modules > >> Traceback (most recent call last): >> File "C:\Users\gberbeglia\Documents\python\scripting\mycodes\main.py", >> line 36, in <module> >> m2 = pickle.load(file) >> File "C:\Python26\lib\pickle.py", line 1370, in load >> return Unpickler(file).load() >> File "C:\Python26\lib\pickle.py", line 858, in load >> dispatch[key](self) >> File "C:\Python26\lib\pickle.py", line 1090, in load_global >> klass = self.find_class(module, name) >> File "C:\Python26\lib\pickle.py", line 1124, in find_class >> __import__(module) >> ImportError: No module named markov_model > > Peter > -- > http://mail.python.org/mailman/listinfo/python-list > > -- View this message in context: http://old.nabble.com/Pickle-problem-while-loading-a-class-instance.-tp28154964p28197881.html Sent from the Python - python-list mailing list archive at Nabble.com.
From: Gabriel Genellina on 9 Apr 2010 18:13
En Fri, 09 Apr 2010 18:42:23 -0300, gerardob <gberbeglia(a)gmail.com> escribi�: > I tried both things: > > 1- moved all the code to C:/Python26/lib/site-packages > 2- Modified the PYTHONPATH in the windows registry. > > However, i stil have exactly the same error on the screen. > > Any other suggestions? Did you follow the advice below? > Peter Otten wrote: >> >>> file = open("prueba.txt", 'w') >> >> Remember to open the file in binary mode. You have to re-create your pickle file, open it in binary mode 'wb' ("prueba.txt" is not a good name - it's not a text file). Any old pickle file created in text mode won't be readable. -- Gabriel Genellina |