我尝试导入我搁置的自定义类实例,但我得到了:
Import Error: No module named MyModule
我所有的python模块都位于包含__init__.py
这是我的puttoshelve.py模板来执行搁置:
from MyModule import MyModule
import shelve
import copy
mymodule = MyModule()
cmymodule = copy.deepcopy(mymodule)
pathtomyshelve ="/some/path/shelve"
cshelve = shelve.open(pathtomyshelve)
cshelve['object'] = cmymodule
cshelve.close()
这实际上是一个搁置。如果我在同一个导入托架中运行ipython会话,并且:
from MyModule import MyModule
import shelve
pathtomyshelve ="/some/path/shelve"
shelve_p = shelve.open(pathtomyshelve)
obj = shelve_p['object']
obj
然后我得到:
{'object': <MyModule.MyModule object at 0x2139510>}
BUT
当我使用outofshelve.py来检索我的对象时,我收到了基本上与我从ipython控制台运行的代码相同的内容:
Import Error: No module named MyModule
我在这里缺少什么? (以下完整错误)
File "/home/pierre/.qgis2/python/plugins/sig40/sig40_ZR_dialog.py", line 100, in __init__
self.mymodule = shelve_p['object']
File "/usr/lib/python2.7/shelve.py", line 122, in __getitem__
value = Unpickler(f).load()
File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 454, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named MyModule
答案 0 :(得分:0)
当我尝试使用自己的Logwriter时,我遇到了同样的问题。
我找到了解决方案。 (但它是python 3.所以代码可能会改变一点)
cDir = os.path.dirname(os.path.abspath("logWriter.py"))
sys.path.append(os.path.dirname(cDir))
import logClasses.logWriter as log
我的文件夹结构就像那样
我希望解决方案对你有用,就像它为我做的那样