2015-10-20 44 views
1

我查看了相關的cPickle問題的各種答覆,但似乎沒有幫助。使用cloudpickle代替cPickle也不會。導入錯誤與cPickle

我有一個模塊名爲MyModule的定義了MyClass類

首先,我從我的項目文件夾運行在不同的文件夾中的腳本。我從項目中導入我自己的類MyClass,創建一個類的實例並在目標路徑上進行pickle。

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並檢查出來。