【ModuleNotFoundError 与 ImportError】之 most likely due to a circular import
目录
- 前言
- 1 示例
- 2 解释器的操作步骤
- 3 错误分析
- 4 解决办法
- 5 运行示例
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
“most likely due to a circular import”翻译为“很可能是由于循环导入”,提示 ImportError,在对自定义模块的引用中出现。Python 学习手册《编程常见问题》对“How can I have modules that mutually import each other?”的回答解决了这个问题。本文是对这一内容的抄录和整理。
提示:以下是本篇文章正文内容,下面案例可供参考
1 示例
如下示例来自学习手册:
2 解释器的操作步骤
3 错误分析
对上述操作步骤的错误分析:
- The last step fails, because Python isn’t done with interpreting foo yet and the global symbol dictionary for foo is still empty.
最后一步失败了,因为 Python 还没有完成对 foo 的解释,而且 foo 的全局符号字典仍然是空的。 - The same thing happens when you use import foo, and then try to access foo.foo_var in global code.
当您使用 import foo,然后尝试在全局代码中访问 foo.foo_var 时,也会发生同样的事情。
4 解决办法
这个问题有(至少)三种可能的解决方法。
- Guido van Rossum recommends avoiding all uses of from import …, and placing all code inside functions. Initializations of global variables and class variables should use constants or built-in functions only. This means everything from an imported module is referenced as < module >.< name >.
Guido van Rossum 建议避免使用 from < module > import …,并将所有代码放在函数中。 全局变量和类变量的初始化应该只使用常量或内置函数。 这意味着导入模块中的所有内容都被引用为 < module >.< name >。 - Jim Roskind suggests performing steps in the following order in each module:
建议在每个模块中按以下顺序执行:
- exports (globals, functions, and classes that don’t need imported base classes)
导出(不需要导入基类的全局变量、函数和类) - import statements
import 语句 - active code (including globals that are initialized from imported values).
活动代码(包括从导入值初始化的全局变量)。
Guido van Rossum doesn’t like this approach much because the imports appear in a strange place, but it does work.
Guido van Rossum 不太喜欢这种方法,因为导入出现在一个陌生的地方,但它确实有效。
- Matthias Urlichs recommends restructuring your code so that the recursive import is not necessary in the first place.
Matthias Urlichs 建议重新构建您的代码,以便一开始就不需要递归导入。
这些解决方案并不相互排斥。
5 运行示例
体会一下循环导入的运行实例:
总结
- 我个人推荐 Guido van Rossum 的建议:
1.1. 避免使用 from < module > import …,并将所有代码放在函数中。
1.2. 全局变量和类变量的初始化应该只使用常量或内置函数。
1.3. 这意味着导入模块中的所有内容都被引用为 < module >.< name >。 - 我的老师尹成有一个串联类的示例里,直接用 self 变量解决了,也值得学习!
2.1. 实际上避免了创建两个实例的问题。
【ModuleNotFoundError 与 ImportError】之 most likely due to a circular import相关推荐
- partially initialized module ‘numpy‘ has no attribute ‘array‘ (most likely due to a circular import)
partially initialized module 'numpy' has no attribute 'array' (most likely due to a circular import) ...
- python 报错 most likely due to a circular import 解决方法
原因各个python文件,互相引用,造成的 循环引用问题. 解决方法:把需要引用的独立成一个文件,让其单向引用 使用python写一个稍微大一点的工程时,经常会遇到循环import,即cicular ...
- WINDOWS在jupyter notebook中导入opencv显示报错:most likely due to a circular import
问题:已有python,在经过下载anacoda后欲导入opencv报错 当时思路:先把电脑中含有有opencv的文件删除,重新安装opencv 然后在CSDN中查解决方案: 经过在anaconda中 ...
- 解决cannot import name ‘XXX‘ from partially initialized module ‘XXX‘ (most likely due to a circular...
解决cannot import name 'XXX' from partially initialized module 'XXX' (most likely due to a circular im ...
- 【ModuleNotFoundError 与 ImportError】之正确使用 Spyder
目录 1 前言 2 为 Spyder 设置 PYTHONPATH 变量 3 正确使用 Spyder 3.1.之前的错误 3.2.对错误的改进 4 总结 1 前言 提示:这里可以添加本文要记录的大概内容 ...
- 记录错误:ImportError: No module named ‘tools‘。jupyter无法import第三方文件夹的库
在jupyter运行代码,出现这样的错误,找不到相应的模块. 经查找是路径不对,在jupyter默认路径中查不到其他文件夹自己写的包. 解决办法: 代码如下: BASE_DIR = os.path.d ...
- ImportError: cannot import name ‘_gi‘ from partially initialized module ‘gi‘ ubuntu 终端无法启动
Ubuntu系统安装多个Python版本后,如Python2.7.Python3.6.Python3.8,打开某些应用如gnome-terminal出现如下报错: Traceback (most re ...
- 报错ImportError: cannot import name ‘webdriver‘ from partially initialized module ‘selenium‘ (most lik
python中selenium自动化报错 报错信息 ImportError: cannot import name 'webdriver' from partially initialized mod ...
- python打包文件提示错误
ModuleNotFoundError: No module named 'numpy.distutils'------------- 如何解决? 添加: import numpy.distutils ...
最新文章
- python如何输出多个星号_如何将 Python 的一个类方法变为多个方法?
- android内核模块签名,android安装内核module,提示Required key not available
- DDD领域驱动设计简介
- 线性筛法 与 线性求欧拉函数 的计算模板
- 在以下说法错误的是_关于犬麻醉常见的错误认知
- 【客户下单】后台提供webservice服务接收数据
- 找到下一个“元素节点”通用函数
- 用Swift完成不同View Controller之间的切换
- java多线程【线程常用方法】
- python 字符串 变量_Python检查变量是字符串
- absolute之后居中宽度自适应
- Mysql如何清空数据库中所有的表数据
- matlab程序复制出现乱码,matlab程序复制到Word文档里变成乱码,该如何改?
- 小米路由器设置:网桥模式以及IPv6
- python 12345构成不重复的三位数
- [2001年写的小说]星际争霸之外传
- 巴菲特在University of Florida商学院的一次演讲
- 计算机表格中如何计算数据透视表,Excel表格中在数据透视表中添加计算字段的方法...
- 从大数据看技术,为什么天猫双11是史上最大数字经济节日
- 【渝粤教育】国家开放大学2018年秋季 2370T汽车故障诊断技术(A) 参考试题