升级到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 。经过这样一番修改,程序顺利运行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,707评论 25 709
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,717评论 6 427
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,510评论 19 139
  • 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入...
    小小不懂11阅读 8,735评论 2 30
  • 我总是愿意做试水石,尤其是为孩子做试水石,现在努力做的事情似乎都是一举两得的事情,提高自己帮助孩子。这两天在思考,...
    liz梁阅读 3,996评论 0 0