美文网首页Python爱好者程序员生活不易 我用python
升级到Python 3.6 以后 flask 程序无法运行怎么办

升级到Python 3.6 以后 flask 程序无法运行怎么办

作者: 远飞的大雁2010 | 来源:发表于2016-12-27 21:33 被阅读617次

    为了赶新潮,把 Python 升级到了最新的 3.6 版,结果发现 flask 程序无法运行了。查了一些原因,原来是 socketserver 中缺少 ForkingMixIn 所致。

    查看了相关文档,原在Python 3.6 中只有 Posix 系统中 socketserver 有 ForkingMixIn 类,而 Windows 下无此类。

    为了保障程序的运行,要么退回到 3.5 ,要么修改程序。回退无疑是很麻烦的,因为有许多库要重装,许多参数要重新配置。

    Windows 系统中不存在 fork 相关机制,故 ForkingMixIn 应该无用。注释掉相关的引用和调用就可以了。经过查证相关代码,只有 werkzeug 模块的 servers 模块需要使用 ForkingMixIn 类。修改很简单,只要在wekzeug的 servers 模块中删除 ForkingMinxIn 就可以了。

    但这一修改有个致命的缺陷,这个库如果以后升级会重新造成程序运行失败。

    经过研究,找到一个更简单的方法,那就是在自己程序的最前面对 socketserver 进行破解,增加一个假的 ForkingMixIn 类。以便于后面的程序可以顺序运行。这样,程序版本更容易控制一些。

    具体代码如下:

    import os
    if os.name!='posix':
        # 升级到 Python 3.6以后,Windows 版本的 socketserver 模块没有 ForkingMixIn,
        # 故需要使用以下代码进行修正
        import socketserver
        socketserver.ForkingMixIn=socketserver.ThreadingMixIn
    
    from flask import Flask
    app=Flask(__name__)
    

    上述代码在 Windows 环境下,使用 ThreadingMixIn 来替代 ForkingMixIn 。经过这样一番修改,程序顺利运行。

    相关文章

      网友评论

        本文标题:升级到Python 3.6 以后 flask 程序无法运行怎么办

        本文链接:https://www.haomeiwen.com/subject/eumevttx.html