2016-06-15 8 views
10

Ich versuche, einen Beispiel-Dart-Server mit Google AppEngine bereitzustellen. Allerdings, wenn ich diesen Python-Skript ausführen (mit der neuesten Python-Version installiert 3,5)Dev_appserver.py Fehler bei der Bereitstellung in Google AppEngine

dev_appserver.py

ich auch

habe versucht

dev_appserver.py --custom_entrypoint "dart bin/server.dart {port}" app.yaml

ich diesen Fehler:

Traceback (most recent call last): 
    File "C:\Users\jkrie\AppData\Local\Google\Cloud SDK\google-cloud- sdk\bin\dev_appserver.py", line 11, in <module> 
    import bootstrapping.bootstrapping as bootstrapping 
    File "C:\Users\jkrie\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\bootstrapping\bootstrapping.py", line 9, in <module> 
    import setup 

ImportError: No module named 'setup'

Ich habe auch setuptools installiert. Ich muss davon ausgehen, dass etwas mit meiner Google Cloud SDK-Installation nicht stimmt, aber ich weiß wirklich nicht was. Ist Python 3.5 zu neu und ich muss eine ältere Version ausprobieren?

Antwort

3

der Tat müssen Sie Python 2 für die Standard-App Engine-Umgebung für den Augenblick nutzen.

Wenn Sie Python 3 installiert haben, können Sie ein virtualenv mit Python 2 unter Verwendung mkvirtualenv google --python=$(which python2) erstellen und dev_appserver.py . in dieser Umgebung ausführen.

Dies erspart Ihnen den Aufwand, Python degradieren oder Symlink

0

Ich hatte dieses Problem zu python2 da ich sowohl python2.9 und python3.6 installieren. Schneller Weg ohne Deinstallation python3 ist einfach löschen python3 Pfad in Umgebungsvariablen, während Sie GAE verwenden. Fügen Sie sie zurück, wenn Sie mit GAE fertig sind.

0

Ich hatte das gleiche Problem mit einer sehr einfachen Python35 App (jetzt, ein Jahr später!) Ich habe eine virtuelle Python27-Umgebung erstellt, die funktioniert, aber mehr Workarounds benötigt.

Die einfachste Sache ist nur python applicationmodule.py auf der Shell-Befehlszeile ausführen, sodass Sie diese an der Unterseite haben:
if __name__ == '__main__': # This is used when running locally. Gunicorn is used to run the # application on Google App Engine. See entrypoint in app.yaml. app.run(host='127.0.0.1', port=8080, debug=True)

Wenn Sie dann mit dev_appserver.py ausgeführt werden soll, fand ich brauchte ich folgendes ausführen Damit dies in der Google Cloud Shell funktioniert: dev_appserver.py app.yaml --custom_entrypoint ./applicationmodule.py

In diesem Fall stellen Sie sicher, dass applicationmodule.py nicht über den Code if __name__ == '__main__': verfügt. Wenn Sie dies haben, dann startet es die gleiche Aufgabe erneut und beschwert sich über Contention auf Port 8080.

Dies unterscheidet sich von anderen Antworten, die die --custom_entrypoint Parameter mehr wie der app.yaml entrypoint: Eintrag aussehen.

An einem Punkt ausgeführt dev_appserver.py beschwerte sich über die Ausführung Anwendungsmodul.py (Ich vergesse genau), so habe ich sowohl chmod 777 und ich fügte eine #! auf meine lokale Python ausführbare zeigen - es funktionierte nach beiden getan, aber weiß nicht, ob es die chmod oder die #! war, die es getan hat.

2

Google konnte die Datei mit

#!/usr/bin/env python2 

statt

#!/usr/bin/env python 

Es wäre ihre Werkzeuge kompatibel mit OSs prepend machen, die python3 als Standard verwenden.

1

Als @ dan-Cornilescu sagte GAE Standardumgebung Unterstützung nur python2.7

Wenn Sie in einer Umgebung mit multiversion von Python sind, Sie Pipenv easly Ihre dev_appserver.py mit Python 2.7-Version laufen nutzen könnten.

Nachdem Sie have installed pipenv globaly Sie mit Python 2,7

# pipenv install --twoo 

Jedes Mal, wenn Sie brauchen eine pipenv Umgebung in Ihrem Projektordner erstellen könnte ausführen dev_appserver.py Sie diesen Befehl

# pipenv run dev_appserver.py app.yaml 

pipenv verwenden sollten, wird Verwenden Sie Python 2.7, um Ihren Code auszuführen. ;-)