python - 无法从 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不允许循环导入吗?
解决方案
您有一个循环导入。在您的基本模块中,您尝试从扩展中导入。但是从扩展中导入基础。但是 base 尚未完成导入,因此当您尝试从扩展模块导入任何内容时会导致 ImportError。
推荐阅读
- ios - 从 Xamarin.Form 将 iOS 构建提交到 Facebook
- angular7 - ngModel 不使用 ngx-material-timepicker 中的 value 属性并在 Angular7 中输入?
- ruby - 为什么我的脚本不能访问不同目录中的类?
- python - 如何使用字典将多个值存储在两个不同的数组中
- jquery - 每次尝试运行代码时如何修复切换到 jQuery 库
- pip - 即使在安装了开发包之后,安装 python-ldap 也会失败,并且在 ubuntu 17.10 中找不到 lber.h 文件
- python - get_object_or_404() 的第一个参数必须是模型、管理器或查询集,而不是“函数”
- android - 如何自定义底部导航项?
- reactjs - React Apollo SSR getDataFromTree 不等待查询
- keras - Conv2D + LSTM 网络给出错误