首页 > 解决方案 > 无法从 Python 中的本地文件导入类

问题描述

从存储在同一级目录中的文件进行 Python 本地导入常常让我感到困惑。我有以下目录结构,

/distrib
  __init__.py # empty
  bases.py # contains classes MainBase etc.
  extension.py  # contains classes MainExtension etc
/errors
  __init__.py
  base_error.py 

在文件中bases.py导入类extension.py是成功的。例如,简单地使用from .extensions import MainExtension就可以了。另一方面,在 中extensions.py,导入一个类 frombases.py面临挑战。

尝试 1

如果是我from bases import MainBase,它会抱怨ModuleNotFoundError: No module named 'bases'

尝试 2

如果我将它指定为本地导入from .bases import MainBase,它会抱怨ImportError: cannot import name 'MainBase'

尝试 3

如果我使用 导入它from . import bases,则没有错误。但是,因此使用bases.MainBase触发器错误module distrib.bases has no attribute 'MainBase',并且文件中定义的所有类似乎bases.py都“丢失”。

但是,在不同的文件夹中,例如errors,我可以正常导入类distrib.bases。这里到底发生了什么?Python不允许循环导入吗?

标签: pythonimportmodule

解决方案


您有一个循环导入。在您的基本模块中,您尝试从扩展中导入。但是从扩展中导入基础。但是 base 尚未完成导入,因此当您尝试从扩展模块导入任何内容时会导致 ImportError。


推荐阅读