在Python 3.6中运行Flask dev服务器会引发SocketServer和ForkingMixIn的ImportError

Sha*_*der 25 python werkzeug flask python-3.6

我正在尝试使用Python 3.6运行基本的Flask应用程序.但是,我得到了一个ImportError: cannot import name 'ForkingMixIn'.使用Python 2.7或3.5运行时,我不会收到此错误.如何使用Python 3.6运行Flask?

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\werkzeug\serving.py", line 65, in <module>
    from SocketServer import ThreadingMixIn, ForkingMixIn
ImportError: No module named 'SocketServer'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".\fsk.py", line 9, in <module>
    app.run()
  File "C:\Python36\lib\site-packages\flask\app.py", line 828, in run
    from werkzeug.serving import run_simple
  File "C:\Python36\lib\site-packages\werkzeug\serving.py", line 68, in <module>
    from socketserver import ThreadingMixIn, ForkingMixIn
ImportError: cannot import name 'ForkingMixIn'
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 38

从Werkzeug 0.11.15开始修复.确保您已安装最新版本的Werkzeug.pip install -U werkzeug.


这是一个已知的问题,已经报告给Werkzeug预期Python 3.6.在合并和发布该补丁或其他补丁之前,Werkzeug的开发服务器将无法在Python 3.6上运行.

检查OS是否可以在导入之前进行分叉,ForkingMixIn因为Python 3.6将不再定义在操作系统上不可用时(python/cpython @ aadff9b)并且ImportError: cannot import name 'ForkingMixIn'将会发生.

与此同时,您可以使用外部WSGI服务器(如Gunicorn)运行您的应用程序.

pip install gunicorn
gunicorn my_app:app
Run Code Online (Sandbox Code Playgroud)

如果您需要页内调试器,则可以将应用程序包装在调试中间件中(只要您只使用一个工作程序运行Gunicorn).