28

我正在尝试使用 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!"
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'
4

1 回答 1

42

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


这是一个已知问题,在预期 Python 3.6时已向 Werkzeug 报告。在合并和发布该补丁或其他补丁之前,Werkzeug 的开发服务器将不会在 Python 3.6 上运行。

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

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

pip install gunicorn
gunicorn my_app:app

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

于 2016-08-29T20:19:21.560 回答