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