自定义Python模块不导入

时间:2016-07-10 05:23:07

标签: python debugging import module runtime-error

我似乎无法克服这个问题并且不太明白发生了什么。我有一个目录,里面有两个类文件。使用该目录中的REPL,我可以导入这两个文件并执行它们的逻辑。但是,从其运行main()的父目录中,只有一个类文件可见,可分页。

目前项目结构

project/
    src/
        __init__.py # empty
        pagingsimulation.py # main() imports memory
        process.py
        memory/
            __init__.py # imports pagetable.py
            pagetable.py # visible
            page.py # error

pagingsimulation.py能够导入内存/并实例化pagetable.PageTable,但是一旦我创建了page.py并且有pagetable.py导入page.py,pagingsimulation.py现在会在执行时抛出此错误。

Traceback (most recent call last):
  File "pagingsimulator.py", line 5, in <module>
    import memory
  File "src/memory/__init__.py", line 1, in <module>
    from .pagetable import PageTable
  File "src/memory/pagetable.py", line 1, in <module>
    import page
ImportError: No module named 'page'

在memory / __ init__.py中我目前有,

    from .pagetable import PageTable

...但是尝试了许多其他变化而没有成功。

我尝试了多种方法并且已经研究了一段时间,也许这是我在这一点上看不到的东西。什么阻止我的自定义模块从main()运行时互相导入?

1 个答案:

答案 0 :(得分:0)

我怀疑的解决方案是一个路径问题,更具体地说,关于模块在导入父文件后如何交互,pagingsimulation.py。

所以要解决这个问题,它与__init__.py无关,而是我如何从pagetable.py中访问page.py

所以pagingsimulator.py使用,

import memory

在内存中, init .py文件有,

from .pagetable import PageTable

要使PageTable访问Page,必须使用import语句

from memory import Page

对我来说似乎有点时髦,经过这么多次失败之后我想说有一种更清洁的方法可以做到这一点,但暂时我会取胜并希望在这里留下这个问题因为我在搜索过程中无法找到类似内容,所以会让别人受益。