web-dev-qa-db-ja.com

Flask= dev server in Python 3.6はSocketServerとForkingMixInのImportErrorを発生させます

Flask 3.6を使用して基本的なPythonアプリを実行しようとしています。ただし、ImportError: cannot import name 'ForkingMixIn'を取得します。 Python 2.7または3.5で実行すると、このエラーは発生しません。 Flask 3.6でPythonを実行するにはどうすればよいですか?

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'
25
SharpCoder

これは、Werkzeug 0.11.15で修正されています。 Werkzeugの最新バージョンがインストールされていることを確認してください。 pip install -U werkzeug


これは既知の問題でした Werkzeugに報告 Python 3.6を見越して。そのパッチまたは別のパッチがマージされてリリースされるまで、Werkzeugの開発サーバーは= Python 3.6。

OSがForkingMixInをインポートする前にforkできるかどうかを確認します。なぜなら、Python 3.6はオペレーティングシステムで利用できない場合、それを定義しないためです( python/cpython @ aadff9b )およびImportError: cannot import name 'ForkingMixIn'が発生します。

それまでの間、Gunicornなどの外部WSGIサーバーでアプリを実行できます。

pip install gunicorn
gunicorn my_app:app

ページ内デバッガーが必要な場合は、1つのワーカーでのみGunicornを実行する限り、アプリを debug middleware でラップできます。

38
davidism