Ошибка Dev_appserver.py при попытке установить приложение Google AppEngine

Я пытаюсь развернуть пример dart-сервера с помощью Google AppEngine. Однако, когда я запускаю этот python script (с последней версией python, установленной 3.5)

dev_appserver.py

Я также пробовал

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

Я получаю эту ошибку:

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: нет модуля с именем 'setup'

Я также установил setuptools. Я должен предположить, что с установкой Google Cloud SDK что-то не так, но я действительно не знаю, что. Является ли python 3.5 слишком новым, и мне нужно попробовать более старую версию?

Ответ 2

Действительно, вы должны использовать Python 2 для стандартной среды App Engine.

Если у вас установлен Python 3, вы можете создать virtualenv с помощью Python 2 с помощью mkvirtualenv google --python=$(which python2) и запустить dev_appserver.py . в этой среде.

Это избавляет вас от необходимости переходить на питон или ссылаться на python на python2

Ответ 3

Google может добавить файл с

#!/usr/bin/env python2

вместо

#!/usr/bin/env python

Это сделает их инструменты совместимыми с ОС, которые используют python3 по умолчанию.

Ответ 4

Как @dan-cornilescu сказал, что стандартная среда GAE поддерживает только Python2.7

Если вы находитесь в среде с мультиверсией Python, вы можете легко использовать Pipenv для запуска dev_appserver.py с Python 2.7 версия.

После того, как вы установили pipenv globaly, вы можете создать среду pipenv внутри вашей папки проекта с Python 2.7

# pipenv install --twoo

Каждый раз, когда вам нужно запустить dev_appserver.py, вы должны использовать эту команду

# pipenv run dev_appserver.py app.yaml

pipenv будет использовать Python 2.7 для запуска вашего кода.; -)

Ответ 5

У меня была эта проблема, так как я устанавливаю оба python2.9 и python3.6. Быстрый путь без удаления python3 - это просто удалить путь python3 в переменных среды, пока вы используете GAE. Добавьте их обратно, когда закончите с GAE.

Ответ 6

У меня была такая же проблема с очень простым приложением python35 (теперь, через год!) Я создал виртуальную среду python27, которая работает, но требует дополнительных обходов.

Проще всего просто запустить python applicationmodule.py в командной строке оболочки, гарантируя, что у вас это внизу:
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)

Если вы хотите запустить с помощью dev_appserver.py, тогда я обнаружил, что для выполнения этой работы в облачной оболочке Google мне нужно запустить следующее: dev_appserver.py app.yaml --custom_entrypoint ./applicationmodule.py

В этом случае убедитесь, что applicationmodule.py не имеет кода if __name__ == '__main__':. Если у вас есть это, то он снова запускает ту же задачу и жалуется на конфликт на порту 8080.

Это отличается от других ответов, у которых параметр --custom_entrypoint больше похож на запись app.yaml entrypoint:.

В какой-то момент выполнение dev_appserver.py жаловалось на выполнение applicationmodule.py(я точно забыл), поэтому я сделал оба chmod 777, и я добавил #!, указывающий на мой локальный исполняемый файл python, - он работал после того, но не знаю, выполнили ли это chmod или #!.