资讯专栏INFORMATION COLUMN

Python ImportError: cannot import name

focusj / 693人阅读

摘要:要避免错误,要保证在导入模块中内容时,此内容在程序执行到此处时已定义。改为中的实际示例导入定义使用导入使用导入使用文件改为定义导入使用

Python 项目逐渐增大,循环导入时,一不留神可能碰到错误:

ImportError: cannot import name ‘

出现此问题一般是因为在导入模块时顺序上了问题
看如下例子:

./test
    ├── main.py
    ├── sub_a.py
    ├── sub_b.py
# main.py
from sub_a import x
print(x + 1)
# sub_a.py
from sub_b import b

a = 1
x = a + b
print(x)
# sub_b.py
from sub_a import a
b = a + 1

运行:

python module_a.py
Traceback (most recent call last):
  File ".main.py", line 1, in 
    from sub_a import x
  File "~	estsub_a.py", line 1, in 
    from sub_b import b
  File "~	estsub_b.py", line 1, in 
    from sub_a import a
ImportError: cannot import name "a"

main.py进入sub_a.py 中执行from sub_b import b语句,在这里程序进入sub_b.py中执行,"sub_a.py"程序暂停执行,此时需要在sub_b.py使用的sub_a.py 中的 a = 1 变量还没有生成,因此出现了上述错误。

要避免错误,要保证在导入模块中内容时,此内容在程序执行到此处时已定义

module_a.py 改为:

a = 1
from sub_b import b
x = a + b
Flask 中的实际示例:
# app.py

from flask_mongoengine import MongoEngine
# 导入
from .views.main import main as main_blueprint

# 定义
db = MongoEngine()

# 使用
app.register_blueprint(main_blueprint)
# views.main.py

# 导入
from user import User

# 使用
Users.objects()            
# users.py

# 导入
from app import db            

# 使用
class Users(db.Document):
    id = db.StringField(primary_key=True)
    name = db.StringField(required=True)

app.py 文件改为:

# app.py

from flask_mongoengine import MongoEngine

# 定义
db = MongoEngine()


# 导入
from .views.main import main as main_blueprint
# 使用
app.register_blueprint(main_blueprint)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40726.html

相关文章

  • caffe Ununtu 16.04.4开发环境配置(CPU版)

    摘要:是一种常用的深度学习框架,主要应用在视频图像处理方面的应用上。由于没钱买,只能在虚拟机环境下配置版开发环境,大家勿笑。 caffe是一种常用的深度学习框架,主要应用在视频、图像处理方面的应用上。由于没钱买gpu,只能在虚拟机环境下配置Ubuntu CPU版caffe开发环境,大家勿笑。 1.首先,先安装依赖库: sudo apt-get install libprotobuf-dev...

    2shou 评论0 收藏0
  • Scrapy:python3下的第一次运行测试

    摘要:,引言的架构初探一文讲解了的架构,本文就实际来安装运行一下爬虫。第一次运行的测试成功,接下来的工作接下来,我们将使用来实现网络爬虫,省掉对每个人工去生成和测试的工作量。,文档修改历史,首次发布 1,引言 《Scrapy的架构初探》一文讲解了Scrapy的架构,本文就实际来安装运行一下Scrapy爬虫。本文以官网的tutorial作为例子,完整的代码可以在github上下载。 2,运行环...

    dack 评论0 收藏0
  • Python - 安装opencc ImportError: no module named dis

    摘要:当通过方式安装时,可能会遇到以下错误。总结下来,共找到以下两种方法方法一下载,解压后,把放到目录下,重新执行命令。但是通过上面发现,之所以会出错,是因为目录下的选择了的安装方式。最后,通过源码重新编译即可安装成功。把中的获取,直接改为 当通过pip方式安装opencc时,可能会遇到以下错误:ImportError: No module named distribute_setup。 p...

    Simon 评论0 收藏0
  • Embedding Python modules into C applications.

    In official Doc. of Python 3, there is a short introduction to embedding Python in another application like C/C++ (seeEmbedding Python in Another Application). The common procedure is as follows, w...

    youkede 评论0 收藏0
  • 升级Python导致的yum,pip报错解决方案

    摘要:服务器上版本过低,升级为,而未升级,导致在执行时报这个错误。报错报错解决方案查看版本,执行可以查看到存在两个版本的。将原有的改为老版本跳出再次执行,即可使用。解决方案方法一同,不建议。 原因: yum是Python写的。服务器上Python版本过低,升级为2.7,而yum/pip未升级,导致在执行yum/pip时报这个错误。yum报错: There was a problem impo...

    BoYang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<