如何在导入同一子目录中的另一个模块的子目录中导入模块?

时间:2017-07-05 07:51:34

标签: python python-import

在我导入的模块中,我尝试导入位于同一目录中的另一个模块。

我的文件看起来像这样......

project
├── main.py
└── app
    └── foo.py
    └── bar.py

main.py

import app.foo as Foo

foo.py

import bar

所以现在,当我运行main.py时,我得到了一个

ModuleNotFoundError: No module named 'bar'

有很多类似的问题,但似乎没有一个是我的确切情况。

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

从..或进口。应该工作:

from . import bar 

记得在app目录中添加__init__.py(空文件)。

编辑:只有在使用foo和bar作为模块时才可以完成。例如。你将无法运行“python foo.py”或“python foo.bar”。在app目录之外,您可以尝试使用以下代码:

python -m app.foo

(介意缺少.py扩展名)

答案 1 :(得分:0)

这主要是因为直接运行main.py时,Python会使用main.py所在的目录作为当前运行目录,因此当您import bar直接在foo.py时, Python解释器将尝试在该运行目录中查找bar模块,其中bar.py显然不存在。这就是为什么需要相对导入的原因,正如@Robert Szczelina所回答的那样 如果直接运行foo.py,则import bar将是正确的。