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

为了赶新潮,把 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 程序无法运行怎么办)