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)