with saving open loads how example python module import pickle

python - saving - pickle no puede importar un módulo que existe?



python pickle function (2)

¿Por qué podría suceder 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 bien el módulo si import window , pero cuando se carga con cPickle no parece funcionar.

Para obtener 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 window es project1/MODULE/window.py . main.py comienza:

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

El módulo que intento cargar se encuentra en project2/project2sub/MODULE/data.py , sin project2/project2sub/MODULE/data.py con la ruta del sys .

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

¿Podría el sys.path esto de alguna manera?


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 sys.path carga y guardado debería funcionar. Sin embargo, si import module.foo en un lugar, y sys.path.append(''module''); import foo sys.path.append(''module''); import foo , tiene dos rutas de módulos diferentes: en la primera instancia, la ruta del módulo es module.foo mientras que en el segundo solo es foo . Estos no son equivalentes y eso evitará que pickle funcione correctamente.


Verifique que esté importando clases en la programación de carga de la misma manera que lo hace en el programa 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)