This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2008年03月15日 19:18 by gpk, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Messages (5) | |||
|---|---|---|---|
| msg63560 - (view) | Author: Greg Kochanski (gpk) | Date: 2008年03月15日 19:18 | |
If you attempt to cPickle a class, cPickle checks that it can get the identical class by importing it. If that check fails, it reports: Traceback (most recent call last): ... "/usr/local/lib/python2.5/site-packages/newstem2-0.12.3-py2.5-linux-i686.egg/newstem2/stepperclient.py", line 41, in send s = cPickle.dumps( args, cPickle.HIGHEST_PROTOCOL) cPickle.PicklingError: Can't pickle <class 'test_simple2.aModel'>: it's not the same object as test_simple2.aModel $ Normally, this is probably a good thing. However, if you do an import using the "imp" module, via imp.load_module(name, fd, pn, desc), you get the "same" module containing the "same" classes, but everything is duplicated at different addresses. In other words, you get distinct class objects from what cPickle will find. Consequently, the when cPickle makes the "is" comparison between what you gave it and what it can find, it will fail and cause an error. In this case, the error is wrong. I know that the aModel classes come from the same file and are member-for-member the same. This may well be a documentation error: it needs to mention this test and note that classes in modules imported via imp are not picklable. Or, imp needs to note that its results are not picklable. Or both. Or, maybe it's something that should be fixed, though I'm not sure if there is a general solution that will always behave well. |
|||
| msg63629 - (view) | Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) | Date: 2008年03月17日 10:09 | |
The following "Works for me":
>>> import imp, cPickle
>>> mymod = imp.load_module('mymod', *imp.find_module('codecs'))
>>> cPickle.dumps(mymod.Codec(), cPickle.HIGHEST_PROTOCOL)
'\x80\x02(cmymod\nCodec\nq\x01o}q\x02b.'
Do you have a short test case to reproduce your problem?
Does your code tweak sys.modules?
|
|||
| msg68289 - (view) | Author: Leandro Lucarella (llucax) | Date: 2008年06月16日 19:08 | |
I'm having the same problem here. Error is: cPickle.PicklingError: Can't pickle qos.Device: it's not the same object as qos.Device If I use pickle module, it works fine. If I use cPickle module but with protocol=0, it works fine (protocol=1 or protocol=2 both fail). I'm trying to make a simple example that reproduce the problem, but I couldn't do it yet (small tests seems to work). So for now, I just can only offer the complete source code of my project[1] (see branch "python-bug-2295"). Not that the bug is exposed by the commit b0ef5dd[2], and it's only exposed in the "qos" module (other modules works fine). To see the backtrace it should be enough to download the project (you can download a tarball[3] or use git via git protocol[4] -preferred- or http[5]) and execute ./pymind [1] http://git.llucax.com.ar/?p=software/pymin.git;a=shortlog;h=refs/heads/python-bug-2295 [2] http://git.llucax.com.ar/?p=software/pymin.git;a=commitdiff;h=b0ef5ddfd5b04ecb09a18fb6f253c9f8a7db48a8 [3] http://git.llucax.com.ar/?p=software/pymin.git;a=snapshot;h=f19fc5b4f5eeda18a24b1f5a2d042fd206c9ed0f;sf=tgz [4] git clone git://git.llucax.com.ar/software/pymin.git [5] git clone http://git.llucax.com.ar/git/software/pymin.git |
|||
| msg68292 - (view) | Author: Leandro Lucarella (llucax) | Date: 2008年06月16日 19:40 | |
I've noted that the problem goes away if I move the pymin/services/* directories (i.e., the packages in pymin/services) to another place (for example, a services directory in the root of the project). I still can't make a simple test to reproduce the problem. |
|||
| msg204970 - (view) | Author: Alexandre Vassalotti (alexandre.vassalotti) * (Python committer) | Date: 2013年12月01日 21:44 | |
We can't fix this without a working test case. Feel free to re-open if you find one. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:31 | admin | set | github: 46548 |
| 2013年12月01日 21:44:07 | alexandre.vassalotti | set | status: open -> closed versions: + Python 2.7, - Python 2.6, Python 3.1 messages: + msg204970 assignee: docs@python -> alexandre.vassalotti components: - Documentation resolution: works for me |
| 2010年10月29日 10:07:21 | admin | set | assignee: georg.brandl -> docs@python |
| 2009年05月16日 19:38:23 | ajaksu2 | set | priority: normal stage: test needed versions: + Python 2.6, Python 3.1, - Python 2.5 |
| 2008年06月16日 19:40:33 | llucax | set | messages: + msg68292 |
| 2008年06月16日 19:08:13 | llucax | set | nosy:
+ llucax messages: + msg68289 |
| 2008年05月10日 05:41:41 | alexandre.vassalotti | set | nosy: + alexandre.vassalotti |
| 2008年03月17日 10:09:44 | amaury.forgeotdarc | set | nosy:
+ amaury.forgeotdarc messages: + msg63629 |
| 2008年03月15日 19:18:44 | gpk | create | |