【问题标题】:Shelve import module error python 2.7搁置导入模块错误python 2.7
【发布时间】:2014-08-08 07:55:11
【问题描述】:

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

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>}

但是

当我使用 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

【问题讨论】:

  • 只是为了结束这个问题:MyModule 引用了一些阻止执行架子的 Qt 对象。我不知道是否有办法解决这个问题,因为我放弃了我的初始对象,而是选择了一个更简单的对象,只包含内置的 python 对象。关闭。

标签: python-2.7 shelve


【解决方案1】:

当我尝试使用自己的 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. 日志类
    1. 初始化.py
    2. logWriter.py
  2. 邮件类
    1. 初始化.py
    2. sendMail.py

我希望这个解决方案对你有用,就像对我一样

【讨论】:

  • 我试过没有成功。我所有的模块都位于同一个包中,但我尝试加载的 shelve.db 已写入另一个目录。如果我实例化另一个 mynewmodule = MyModule() 它可以毫无问题地构建,所以 MyModule 很好导入。如果我将 shelve.db 复制到我的包中,我也没有收到任何错误。
  • @PeterPeterson 也许尝试以与 MyModul 相同的方式附加 shelve.db 的路径
猜你喜欢
  • 2016-06-01
  • 2016-07-27
  • 1970-01-01
  • 2017-06-19
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多