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)