¿Pickle no puede importar un módulo que existe?

¿Por qué podría pasar esto?

import window; print "LOADED"; data = cPickle.loads(data) 

El resultado es:

 LOADED Traceback (most recent call last): ... import window; print "LOADED"; data = cPickle.loads(data) exceptions.ImportError: No module named window 

Carga el módulo bien si import window , pero al cargar con cPickle no parece funcionar.

Para información adicional que probablemente sea relevante:

El módulo en el que project1\MODULE\submodule\main.py el archivo está en project1\MODULE\submodule\main.py El módulo de la window es project1\MODULE\window.py . main.py comienza:

     import sys sys.path.append("..\\..") sys.path.append("..") ... import window 

    El módulo del que estoy intentando cargar está en project2\project2sub\MODULE\data.py , sin project2\project2sub\MODULE\data.py la ruta del sistema.

    MODULE es el mismo en ambos casos: el módulo que quiero cargar es project2\project2sub\MODULE\window.py .

    ¿Podría la aplicación sys.path desordenar esto de alguna manera?

    Asegúrese de que está importando clases en la progtwigción de carga de la misma manera que lo está haciendo en el progtwig de guardado .

    Ahorro:

      import window myObj.window_obj = window.wObj 

    Cargando

      import window myObj = cPickle.loads(data) 

    NO:

    Ahorro:

      from window import wObj myObj.window_obj = wObj 

    Cargando:

      import window myObj = cPickle.loads(data) 

    Pickle depende de la ruta del módulo. No importa cómo cargue los módulos, si no se sys.path con sys.path , la carga y el almacenamiento de pickle deberían funcionar. Sin embargo, si import module.foo en un lugar, y sys.path.append('module'); import foo sys.path.append('module'); import foo , tienes dos rutas de módulo diferentes: en la primera instancia, la ruta del módulo es module.foo mientras que en la segunda es simplemente foo . Estos no son equivalentes y eso evitará que Pickle funcione correctamente.