From: gerardob on

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
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
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

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
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