目录

  • 前言
  • 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 错误分析

对上述操作步骤的错误分析:

  1. 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 的全局符号字典仍然是空的。
  2. 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 解决办法

这个问题有(至少)三种可能的解决方法。

  1. 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 >。
  2. 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 不太喜欢这种方法,因为导入出现在一个陌生的地方,但它确实有效。
  1. Matthias Urlichs recommends restructuring your code so that the recursive import is not necessary in the first place.
    Matthias Urlichs 建议重新构建您的代码,以便一开始就不需要递归导入。

这些解决方案并不相互排斥。


5 运行示例

体会一下循环导入的运行实例:


总结

  1. 我个人推荐 Guido van Rossum 的建议:
    1.1. 避免使用 from < module > import …,并将所有代码放在函数中。
    1.2. 全局变量和类变量的初始化应该只使用常量或内置函数。
    1.3. 这意味着导入模块中的所有内容都被引用为 < module >.< name >。
  2. 我的老师尹成有一个串联类的示例里,直接用 self 变量解决了,也值得学习!
    2.1. 实际上避免了创建两个实例的问题。


【ModuleNotFoundError 与 ImportError】之 most likely due to a circular import相关推荐

  1. 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) ...

  2. python 报错 most likely due to a circular import 解决方法

    原因各个python文件,互相引用,造成的 循环引用问题. 解决方法:把需要引用的独立成一个文件,让其单向引用 使用python写一个稍微大一点的工程时,经常会遇到循环import,即cicular ...

  3. WINDOWS在jupyter notebook中导入opencv显示报错:most likely due to a circular import

    问题:已有python,在经过下载anacoda后欲导入opencv报错 当时思路:先把电脑中含有有opencv的文件删除,重新安装opencv 然后在CSDN中查解决方案: 经过在anaconda中 ...

  4. 解决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 ...

  5. 【ModuleNotFoundError 与 ImportError】之正确使用 Spyder

    目录 1 前言 2 为 Spyder 设置 PYTHONPATH 变量 3 正确使用 Spyder 3.1.之前的错误 3.2.对错误的改进 4 总结 1 前言 提示:这里可以添加本文要记录的大概内容 ...

  6. 记录错误:ImportError: No module named ‘tools‘。jupyter无法import第三方文件夹的库

    在jupyter运行代码,出现这样的错误,找不到相应的模块. 经查找是路径不对,在jupyter默认路径中查不到其他文件夹自己写的包. 解决办法: 代码如下: BASE_DIR = os.path.d ...

  7. ImportError: cannot import name ‘_gi‘ from partially initialized module ‘gi‘ ubuntu 终端无法启动

    Ubuntu系统安装多个Python版本后,如Python2.7.Python3.6.Python3.8,打开某些应用如gnome-terminal出现如下报错: Traceback (most re ...

  8. 报错ImportError: cannot import name ‘webdriver‘ from partially initialized module ‘selenium‘ (most lik

    python中selenium自动化报错 报错信息 ImportError: cannot import name 'webdriver' from partially initialized mod ...

  9. python打包文件提示错误

    ModuleNotFoundError: No module named 'numpy.distutils'------------- 如何解决? 添加: import numpy.distutils ...

最新文章

  1. python如何输出多个星号_如何将 Python 的一个类方法变为多个方法?
  2. android内核模块签名,android安装内核module,提示Required key not available
  3. DDD领域驱动设计简介
  4. 线性筛法 与 线性求欧拉函数 的计算模板
  5. 在以下说法错误的是_关于犬麻醉常见的错误认知
  6. 【客户下单】后台提供webservice服务接收数据
  7. 找到下一个“元素节点”通用函数
  8. 用Swift完成不同View Controller之间的切换
  9. java多线程【线程常用方法】
  10. python 字符串 变量_Python检查变量是字符串
  11. absolute之后居中宽度自适应
  12. Mysql如何清空数据库中所有的表数据
  13. matlab程序复制出现乱码,matlab程序复制到Word文档里变成乱码,该如何改?
  14. 小米路由器设置:网桥模式以及IPv6
  15. python 12345构成不重复的三位数
  16. [2001年写的小说]星际争霸之外传
  17. 巴菲特在University of Florida商学院的一次演讲
  18. 计算机表格中如何计算数据透视表,Excel表格中在数据透视表中添加计算字段的方法...
  19. 从大数据看技术,为什么天猫双11是史上最大数字经济节日
  20. 【渝粤教育】国家开放大学2018年秋季 2370T汽车故障诊断技术(A) 参考试题

热门文章

  1. binlog回滚mysql误操作数据
  2. leetcode——【猫和老鼠】
  3. 如何在 iPhone 上恢复已删除的短信
  4. python绘制单列多色柱状图
  5. <stm32学习笔记>--基本定时器TIM6TIM7
  6. Windows Phone网页体验版
  7. mongodb 创建只读用户
  8. 如何解决php curl curl_errno返回6 无法解析主机
  9. 抖音新号怎么快速涨粉(8种抖音运营吸粉技巧)
  10. springboot中使用poi-tl导出word(包含表格合并单元格)实例