2016-06-15 16 views
10

Próbuję wdrożyć przykładowy serwer dart za pomocą Google AppEngine. Jednak po uruchomieniu tego skryptu Pythona (z najnowszej wersji Pythona zainstalowany 3,5)Błąd dev_appserver.py podczas próby wdrożenia w Google AppEngine

dev_appserver.py

Próbowałem zostały również

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

otrzymuję ten błąd:

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'

Zainstalowałem także narzędzia setuptools. Muszę założyć, że coś jest nie tak z moją instalacją Google Cloud SDK, ale naprawdę nie wiem co. Czy python 3.5 jest zbyt nowy i czy muszę wypróbować starszą wersję?

Odpowiedz

3

Rzeczywiście trzeba użyć Python 2 dla standardowego środowiska App Engine w danym momencie.

Jeśli masz zainstalowany Python 3, możesz utworzyć virtualenv używając Pythona 2 używając mkvirtualenv google --python=$(which python2) i uruchomić dev_appserver.py . w tym środowisku.

To oszczędza kłopotów z konieczności downgrade lub symlink python do python2

0

miałem ten problem, ponieważ ja zainstalować zarówno python2.9 i python3.6. Szybka metoda bez odinstalowania python3 to po prostu usuń ścieżkę python3 w zmiennych środowiskowych podczas korzystania z GAE. Dodaj je ponownie, gdy skończysz z GAE.

0

Miałem ten sam problem z bardzo prostą aplikacją python35 (teraz, rok później!) Stworzyłem wirtualne środowisko python27, które działa, ale potrzebowało więcej obejść.

Najłatwiej jest po prostu uruchomić python applicationmodule.py w linii poleceń powłoki, zapewniając masz to na dole:
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)

Jeśli chcesz uruchomić za pomocą dev_appserver.py wtedy, znalazłem potrzebne do uruchomienia następujących aby to działało w Google Cloud Shell: dev_appserver.py app.yaml --custom_entrypoint ./applicationmodule.py

W takim przypadku upewnij się, że applicationmodule.py nie ma kodu if __name__ == '__main__':. Jeśli masz to, to ponownie uruchamia to samo zadanie i narzeka na rywalizację na porcie 8080.

Różni się to od innych odpowiedzi, które mają parametr --custom_entrypoint i przypominają bardziej wpis app.yaml entrypoint:.

W pewnym momencie wykonanie dev_appserver.py poskarżyło się na wykonanie modułu aplikacji .py (Zapomniałem dokładnie), więc zrobiłem zarówno chmod 777 i dodałem #! wskazując na mój lokalny plik wykonywalny Pythona - działało po zrobieniu obu, ale nie wiem, czy to było chmod czy #!, które to zrobiły.

2

Google może poprzedzić plik z

#!/usr/bin/env python2 

zamiast

#!/usr/bin/env python 

Byłoby swoje narzędzia kompatybilne z systemami operacyjnymi, które używają python3 jako domyślne.

1

Jako @ dan-Cornilescu wymieniona podpora GAE standardowym środowisku tylko Python2.7

Jeśli jesteś w środowisku z wielowersyjnego Pythona, można w łatwy używać Pipenv uruchomić dev_appserver.py z Pythonem 2.7 wersji.

Po have installed pipenv globaly można stworzyć środowisko pipenv wewnątrz folderu projektu z Pythonem 2.7

# pipenv install --twoo 

Za każdym razem trzeba uruchomić dev_appserver.py należy użyć tego polecenia

# pipenv run dev_appserver.py app.yaml 

pipenv będzie użyj Pythona 2.7, aby uruchomić swój kod. ;-)

Powiązane problemy