En Tue, 30 Sep 2008 19:44:51 -0300, Daniel <[EMAIL PROTECTED]>
escribió:
On Sep 30, 4:17 pm, "Gabriel Genellina" <[EMAIL PROTECTED]>
wrote:
En Tue, 30 Sep 2008 18:38:19 -0300, Daniel <[EMAIL PROTECTED]>
escribió:
> [BEGIN CODE]
> #!/usr/bin/python
> import SocketServer
> import os, sys
> newpath = os.path.normpath( os.path.join( __file__, "../../.." ))
> sys.path.insert(0, newpath)
> from pop.command.UpdateCommand import *
> import cPickle
> Traceback (most recent call last):
> [...]
> ImportError: No module named UpdateCommand
> I import the module at the top of the file server.py, but it doesn't
> throw the ImportError until it tries to unpickle.
Notice that you don't import the UpdateCommand module - you import all
names defined inside it instead. It's not the same thing.
Seehttp://effbot.org/zone/import-confusion.htm
--
Gabriel Genellina
Thank you Gabriel,
The class inside that module has the same name, UpdateCommand. Since
this is the object that was pickled, it should be available to the
unpickle command. I already understood the difference between import
methods and I think I'm covered. I did just try "import
pop.command.TesterUpdateCommand" instead and I get the same error.
(TesterUpdateCommand != UpdateCommand...)
In your *pickling* code, just before pickling the object, see what you get
from this:
cls = obj.__class__
print cls.__module__
print cls.__name__
Suppose you get "SomeModuleName" and "SomeClassName". Then, in your
*unpickling* environment, this must succeed:
import SomeModuleName
cls = SomeModuleName.SomeClassName
If not, you should rearrange things (on both sides, probably) to make the
reference work. This is basically what pickle does.
Looks like the module lives in a package - make sure you import the
*package* both when pickling and unpickling. The sys.path manipulation
looks suspicious.
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list