flask扩展无法导入?

在跟着《Flask Web开发:基于Python的Web应用开发实战》这本书中的例子写程序。
先用pip安装flask-bootstrap后
使用from flask.ext.bootstrap import Bootstrap导入
但显示的是这样的:
图片描述

之前还试了flask-script也是这个样子的。

阅读 9.9k
5 个回答

from flask.ext.xxx import XXX 是老版本flask插件写法。
现在应该是 from xxx import XXX

还有些插件是from flask-xxx import XXX;ide左侧项目目录externalLibrary中点开能找到你下的包,看包名是什么;github上看官网推荐写法flask-bootstrap

最近正在看flask的源代码,具体原理是这样的:

flask\ext__init.__py
importer = ExtensionImporter(['flask_%s', 'flaskext.%s'], __name__)

再看

flask\exthook.py中定义了ExtensionImporter

def __init__(self, module_choices, wrapper_module):
以扩展的名称和原名创建导入器。
然后在install函数中导入如下:
sys.meta_path[:] = [x for x in sys.meta_path if self != x] + [self]
将自己加入到sys.meta_path。可以理解为如果有对应名称的对象,则导入。可以看下python文档中meta_path的说明。

总的来说,就是当你导入flask.ext.xxx的时候,可能实际导入的是flask_xxx或者flaskext.xxx。因而IDE无法识别。

讲道理,不要使用IDE、不要在win下搞开发

新手上路,请多包涵

你如果克隆书上在github上的项目,然后去看他的项目,你会发现现在新的写法都是flask_xxx,不再是flask.ext.xxx相当于简化了。

可以跑就行了,ext是动态接口,IDE检测不到很正常

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题