Ошибка 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 слишком новым, и мне нужно попробовать более старую версию?
Ответы
Ответ 1
GAE стандартная среда поддерживает только Python 2.7 в настоящее время, см. Документация Google App Engine.
Python 3.4 поддерживается только в гибкой среде, которая другой поток разработки.
Связано: Google cloud dev_appserver.py не может локально размещать проект laravel
Ответ 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
или #!
.