【问题标题】:Failing to import modules within subdirectory无法在子目录中导入模块
【发布时间】:2018-11-25 17:28:17
【问题描述】:

我有一个包,我正试图从中导入某些模块,但失败了。我的目录结构是:

top/
    main_script.py
    middle/
        foo.py
        utils.py
        __init__.py`  

foo.py 每次运行时都可以导入 utils.py,但是,如果我运行 main_script.py,foo.py 将无法导入 utils.py,因为它会给我一个 ModuleNotFoundError: No module named 'utils.py'

我在 main_script.py 中导入 foo.py 的方式是:
from middle import foo

我将 utils.py 导入 foo.py 的方式是:
import utils

如果我将 numpy 导入 foo.py 而不是导入 utils 并运行 main_script.py,它将导入并运行得很好,但是,如果 foo.py 包含 utils,则运行 main_script.py 将失败。

关于如何在不将 main_script.py 放入 middle/ 的情况下解决此问题的任何想法?

【问题讨论】:

  • 你是如何导入 foo 的?是相对进口吗?也可能有助于分享您的导入 sn-p。
  • 编辑问题以提供更多信息
  • 在 foo.py 中,我尝试将导入语句编辑为 import middle.utils as utils,但这给出了 ModuleNotFoundError: no module named 'middle'。同样,如果我尝试像from . import utils 这样给出ImportError: cannot import name 'utils'

标签: python import


【解决方案1】:

如果您能分享您在 main_script 中的导入方式,将会很有帮助。

你的导入应该是:

from middle import foo

或者

from middle import foo, utils

【讨论】:

  • 我还要补充一点,在foo.py 中,作者可能需要指定utilsmiddle 中导入,因此这是导入脚本:import middle.utils as utils
【解决方案2】:

试试这个:

ma​​in_script.py

from middle import foo

print(__name__)

foo.py

from middle import utils

print(__name__)

utils.py

print(__name__)

要了解更多信息,请查看docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多