problem with "ImportError: No module named..." and sockets
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Tue Sep 30 19:49:53 EDT 2008
En Tue, 30 Sep 2008 19:44:51 -0300, Daniel <daniel.watrous at gmail.com>
escribió:
> On Sep 30, 4:17 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
> wrote:
>> En Tue, 30 Sep 2008 18:38:19 -0300, Daniel <daniel.watr... at gmail.com>
>> 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
More information about the Python-list
mailing list