搁置导入模块错误python 2.7

时间:2014-08-08 07:55:12

标签: python-2.7 shelve

我尝试导入我搁置的自定义类实例,但我得到了:

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

1 个答案:

答案 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

我的文件夹结构就像那样

  1. logClasses
    1. 初始化的.py
    2. logWriter.py
  2. mailClasses
    1. 初始化的.py
    2. sendMail.py&lt; - 这使用logWriter.py
  3. 我希望解决方案对你有用,就像它为我做的那样