weird pickle behavior in Python 3.1.2 + Eclipse 3.5.2

K

kirby.urner

Here we are in an Eclipse pydev console, running Python 3.1.2. For
the most part, everything is working great.

However...
C:\Python31\python.exe 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC
v.1500 32 bit (Intel)]
.... def __init__(self):
.... self.name = "Hello"
.... def __repr__(self):
.... return "an Example object named {}".format(self.name)
....
....an Example object named Hello

Note that I'm opening in binary, like I'm supposed to with this
latest protocol:

Should be able to do this, no problemo:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python31\lib\pickle.py", line 1354, in dump
Pickler(file, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute
lookup builtins.Example failed

The above works fine in "naked Python" 3.1.2 by the way.
So this could be a problem with Eclipse / Pydev and/or
user error. What am I missing?

Just normal data structures work:
test = [1,2,3]
pickle.dump(test,f)
f.close()

Any other Eclipse users out there who can at least duplicate this
weirdness?

Kirby Urner
in Portland "Keep Portland Weird" Oregon
 
P

Peter Otten

Here we are in an Eclipse pydev console, running Python 3.1.2. For
the most part, everything is working great.

However...
C:\Python31\python.exe 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC
v.1500 32 bit (Intel)]
... def __init__(self):
... self.name = "Hello"
... def __repr__(self):
... return "an Example object named {}".format(self.name)
...
...an Example object named Hello

Note that I'm opening in binary, like I'm supposed to with this
latest protocol:

Should be able to do this, no problemo:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python31\lib\pickle.py", line 1354, in dump
Pickler(file, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute
lookup builtins.Example failed

The above works fine in "naked Python" 3.1.2 by the way.
So this could be a problem with Eclipse / Pydev and/or
user error. What am I missing?

Just normal data structures work:
test = [1,2,3]
pickle.dump(test,f)
f.close()

Any other Eclipse users out there who can at least duplicate this
weirdness?

I can provoke the error in "naked" Python 3 by changing the
Example.__module__ attribute:

Python 3.1.1+ (r311:74480, Nov 2 2009, 15:45:00)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information..... pass
....Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.1/pickle.py", line 1358, in dumps
Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute lookup
builtins.Example failed

What's the value of __module__ when you run your code in Eclipse?

Peter
 
K

kirby.urner

I can provoke the error in "naked" Python 3 by changing the
Example.__module__ attribute:

Python 3.1.1+ (r311:74480, Nov  2 2009, 15:45:00)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
...     pass
...
b'\x80\x03c__main__\nExample\nq\x00)\x81q\x01}q\x02b.'

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.1/pickle.py", line 1358, in dumps
    Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute lookup
builtins.Example failed

What's the value of __module__ when you run your code in Eclipse?

Peter

Thank you for replying.

Here's from Eclipse console:
'builtins'
'builtins'

Duplicating your result in naked Python:

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit
(Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
pickle.dump(obj2, f)
File "C:\Python31\lib\pickle.py", line 1354, in dump
Pickler(file, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute
lookup builtins.Example failed

So what if I'm in an Eclipse pydev console and
change the Example.__module__ to '__main__'....
C:\Python31\python.exe 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC
v.1500 32 bit (Intel)].... pass
....Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python31\lib\pickle.py", line 1354, in dump
Pickler(file, protocol, fix_imports=fix_imports).dump(obj)

Dang.

Any insights?

Kirby
 
P

Peter Otten

I can provoke the error in "naked" Python 3 by changing the
Example.__module__ attribute:

Python 3.1.1+ (r311:74480, Nov 2 2009, 15:45:00)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import pickle
class Example:

... pass
...
pickle.dumps(Example())
b'\x80\x03c__main__\nExample\nq\x00)\x81q\x01}q\x02b.'
Example.__module__ = "builtins"
pickle.dumps(Example())

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.1/pickle.py", line 1358, in dumps
Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute lookup
builtins.Example failed

What's the value of __module__ when you run your code in Eclipse?

Peter

Thank you for replying.

Here's from Eclipse console:
'builtins'
'builtins'

Duplicating your result in naked Python:

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit
(Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
pickle.dump(obj2, f)
File "C:\Python31\lib\pickle.py", line 1354, in dump
Pickler(file, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute
lookup builtins.Example failed

So what if I'm in an Eclipse pydev console and
change the Example.__module__ to '__main__'....
C:\Python31\python.exe 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC
v.1500 32 bit (Intel)]... pass
...Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python31\lib\pickle.py", line 1354, in dump
Pickler(file, protocol, fix_imports=fix_imports).dump(obj)

Dang.

Any insights?

Sorry, no. Consider a bug report to the pydev project.

Peter
 
F

Fabio Zadrozny

I can provoke the error in "naked" Python 3 by changing the
Example.__module__ attribute:

Python 3.1.1+ (r311:74480, Nov  2 2009, 15:45:00)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import pickle
class Example:

...     pass
...
pickle.dumps(Example())

b'\x80\x03c__main__\nExample\nq\x00)\x81q\x01}q\x02b.'
Example.__module__ = "builtins"
pickle.dumps(Example())

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.1/pickle.py", line 1358, in dumps
Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute lookup
builtins.Example failed

What's the value of __module__ when you run your code in Eclipse?

Peter

Thank you for replying.

Here's from Eclipse console:
Example.__module__ 'builtins'

__name__
'builtins'

Duplicating your result in naked Python:

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit
(Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
class Example: pass

import pickle
Example.__module__ '__main__'
f = open('testpickle.pkl','wb')
obj = Example()
obj
pickle.dump(obj, f)
Example.__module__ = 'builtins'
obj2 = Example()
pickle.dump(obj2, f)
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    pickle.dump(obj2, f)
  File "C:\Python31\lib\pickle.py", line 1354, in dump
    Pickler(file, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'Example'>: attribute
lookup builtins.Example failed

So what if I'm in an Eclipse pydev console and
change the Example.__module__ to '__main__'....
import sys; print('%s %s' % (sys.executable or sys.platform,
sys.version))
C:\Python31\python.exe 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC
v.1500 32 bit (Intel)]
import pickle
class Example:
...     pass
...
Example.__module__ 'builtins'
Example.__module__ = '__main__'
obj = Example()
obj
f = open('testpickle.pkl','wb')
pickle.dump(obj, f)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python31\lib\pickle.py", line 1354, in dump
    Pickler(file, protocol, fix_imports=fix_imports).dump(obj)

Dang.

Any insights?

Sorry, no. Consider a bug report to the pydev project.


I've taken a look at the pydev code and the issue seems to be in
python itself. See: http://bugs.python.org/issue8943

Cheers,

Fabio
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top