为什么语法从flask.ext。*更改为flask_ *?

时间:2017-09-05 08:42:13

标签: python python-3.x flask

看起来有一个弃用。那是怎么决定的? Python 3和Python 2之间有区别吗?

1 个答案:

答案 0 :(得分:4)

旧版flask.ext was deprecated in issue #1135,于2014年创建。实际弃用通知于2016年开启。reasoning behind the deprecation is

  

新贡献者的一些介绍性信息:

     

Flask曾经将flaskext作为扩展名的命名空间,因此它们可以作为flaskext.foo导入。这不能很好地工作,所以引入了新形式flask_foo。 flask.ext.foo是一个兼容层,它将尝试导入这两个变体。见http://flask.pocoo.org/docs/0.10/extensions/

     

flask.ext.foo很难维护,而且由于现在所有扩展都已切换到新的包命名方案,因此不再值得。我们希望将其弃用为1.0,因此我们需要某种工具来帮助用户重写其应用中的所有旧导入。

     

可以写一个类似于这个野兽的Python脚本。这将完成工作,但正如其文档字符串所说,这是一个可怕的黑客。

     

lib2to3对于编写更大的迁移工具非常有用,但使用它并不重要。

     
      
  • https://github.com/mitsuhiko/python-modernize/是基于它的,在我看来,这是最容易被扯掉的项目。
  •   
  • 我无法找到对此有用的完整教程。大多数似乎都专注于移植到Python 3,这意味着在用户的代码库上运行默认的2to3修复程序(我们绝对不希望这样)。
  •   
  • 我认为,必须阅读2to3和lib2to3的源代码才能理解。这可以通过在Google中输入libraryname hg.python.org来实现,其中库名是2to3或lib2to3。
  •   
  • 在Python中执行源代码操作的当前状态很糟糕,我希望看到一个包装lib2to3的库,并提供更简洁的API。
  •   

旧的.ext是一个兼容层,用于在等待flaskext标准化时支持旧的flask_模块。

这将flask.命名空间与每个模​​块的命名空间分开,因为模块现在完全位于其自己的模块(flask_module)中,而不是加载到Flask中所有扩展的通用命名空间中。更明确的是,该模块不是作为Flask的一部分捆绑的。