web-dev-qa-db-fra.com

L'exécution de Flask dev server in Python 3.6 déclenche ImportError for SocketServer and ForkingMixIn

J'essaie d'exécuter une application de base Flask en utilisant Python 3.6. Cependant, j'obtiens un ImportError: cannot import name 'ForkingMixIn'. Je ne reçois pas cette erreur lors de l'exécution avec Python 2.7 ou 3.5. Comment puis-je exécuter Flask with Python 3.6 ?

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

Ceci est corrigé à partir de Werkzeug 0.11.15. Assurez-vous d'avoir installé la dernière version de Werkzeug. pip install -U werkzeug.


Il s'agit d'un problème connu qui était signalé à Werkzeug en prévision de Python 3.6. Tant que ce correctif ou un autre n'a pas été fusionné et publié, le serveur de développement de Werkzeug ne fonctionnera pas = Python 3.6.

Vérifiez si le système d'exploitation peut bifurquer avant d'importer ForkingMixIn puisque Python 3.6 ne le définira plus lorsqu'il n'est pas disponible sur le système d'exploitation ( python/cpython @ aadff9b ) et ImportError: cannot import name 'ForkingMixIn' se produira.

En attendant, vous pouvez exécuter votre application avec un serveur WSGI externe tel que Gunicorn.

pip install gunicorn
gunicorn my_app:app

Vous pouvez envelopper votre application dans debug middleware si vous avez besoin du débogueur intégré (tant que vous n'exécutez Gunicorn qu'avec un seul travailleur).

38
davidism