【问题标题】:How to import a module in a subdirectory that imports another module in that same subdirectory?如何在同一子目录中导入另一个模块的子目录中导入模块?
【发布时间】:2017-07-05 07:51:34
【问题描述】:

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

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

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

ma​​in.py

import app.foo as Foo

foo.py

import bar

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

ModuleNotFoundError: No module named 'bar'

有很多类似的问题,但似乎都不是我的确切情况。

我怎样才能让它工作?

【问题讨论】:

标签: python python-import


【解决方案1】:

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

from . import bar 

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

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

python -m app.foo

(注意缺少 .py 扩展名)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      相关资源
      最近更新 更多