GAE-Standard Flask-Lernprogramm: ImportError: Name SpooledTemporaryFile kann nicht importiert werden

8

Ich probiere die Verwendung dieses GAE-Flask-Lernprogramms . Ich glaube, ich habe es genau verfolgt und den Code von Github heruntergeladen, damit es keine Tippfehler gibt.

Wenn ich den Dev-Server ( dev_appserver.py app.yaml ) starte und zu Ссылка gehe, erhalte ich folgende Fehlermeldung:

%Vor%

Es sieht so aus, als ob es etwas mit der GAE-Sandbox zu tun hat, aber ich kann es nicht herausfinden. Ich habe versucht, den Dev-Server sowohl innerhalb als auch außerhalb des virtualenv laufen zu lassen.

Gibt es etwas Besonderes, wenn Sie virtualenv mit App-Engine verwenden?

    
Jeff O'Neill 08.12.2017, 14:19
quelle

2 Antworten

15

Das Tutorial spezifiziert die Verwendung der Flask-Version 0.12.2.

Flasks setup.py benötigt eine Version von werkzeug nach der Version 0.7

%Vor%

In werkzeug 0.13, dieses Commit im Zusammenhang mit dem Hinzufügen von Unterstützung für Chunked Transfer Encoding fügt den Import von SpooledTemporaryFile hinzu zu werkzeug.formparser .

Die App Engine-Sandbox deaktiviert alle Importe aus der tempfile Modul außer tempfile.TemporaryFile , daher der Fehler.

Um dieses Problem zu umgehen, downgrade Werkzeug auf Version 0.12.2, die den Import nicht enthält.

pip install --target lib --upgrade werkzeug==0.12.2

( pip --upgrade erzwingt die Installation der mitgelieferten Version, daher wird sowohl ein Downgrade als auch ein Upgrade durchgeführt)

oder ändern Sie Ihre Lieferantenanforderungsdatei, um die werkzeug-Version anzuheften

%Vor%

UPDATE:

Dieses Problem wurde nun sowohl im Google Samples Docs Repo als auch im Werkzeug v0.14 .

    
snakecharmerb 10.12.2017, 10:43
quelle
3

Ich habe diesen Fehler kürzlich auch gefunden.
Meine Python-Version ist 2.7.14 in einer Standumgebung.
Ich glaube, es gibt ein Update vor ein paar Tagen, und stören dieses Paket.

Für mich verweisen wir auf die in der Github-Ausgabe hier erwähnte Lösung .
Ich füge das einfach zur Datei appengine_config.py hinzu:

import tempfile tempfile.SpooledTemporaryFile = tempfile.TemporaryFile

Dann funktioniert mein Projekt wie Charme. Der Link, der auch erwähnt wird, wenn Sie frühere Version von Python 2.7 verwenden, könnte das Problem lösen, aber ich habe die Lösung nicht versucht.

    
Brady Huang 11.12.2017 04:49
quelle