2015-10-20 3 views
1

Я просмотрел различные ответы на связанные вопросы cPickle, но никто не помогает. Также не использует cloudpickle вместо cPickle.ImportError with cPickle

У меня есть модуль с именем MyModule, который определяет класс MyClass

Во-первых, я запустить сценарий в другую папку из папки в папку проекта. Я импортирую свой класс MyClass из проекта, создаю экземпляр класса и расчешите его на целевом пути.

sys.path.append(os.path.join(os.environ.get("PROJECT_ROOT"), 'src/')) 
from MyModule import MyClass 
class_instance = MyClass() 
with gzip.open(os.path.join(target_path, 'net.p.gz'), "wb") as f: 
    cPickle.dump(class_instance, f) 

Затем в моем основном проекте, я хочу, чтобы загрузить маринованный файл

from MyModule import MyClass 
with gzip.open(os.path.join(os.environ['PROJECT_ROOT'], 'resources/net.p.gz'), 'rb') as f: 
     class_instance = cPickle.load(f) 

Это приводит к

ImportError: No module named MyModule 

Однако

test_instance = MyClass() 
print (test_instance) 

в том же печать файлов

<MyModule.MyClass object at 0x7fad03e3ead0> 

Таким образом, модуль, очевидно, находится там, и его несовершенство.

Оба раза я имею в виду тот же модуль, он не меняет местоположение. Что мне не хватает?

+0

@gplayer Вы правы. Моя ошибка была в том, что я думал, так как я уже в ~/work/repo/это на пути. Вы хотите передать это как ответ, чтобы я мог принять его? – Darina

ответ

1

Предположим, у вас есть MyModule здесь: ~/work/repo/my_module.py. Если вы хотите, чтобы работала from MyModule import MyClass, вы должны иметь это на пути python: ~/work/repo. Попробуйте сделать import sys; print sys.path и проверьте его.

Смежные вопросы