#python #google-app-engine #google-cloud-endpoints
#python #google-app-engine #google-облако-конечные точки
Вопрос:
Работал во время установки в каталоге samples, загруженном с github, но теперь, когда я создал свой собственный API, сервер разработки запускается, но выдает эту ошибку при нажатии на него с помощью CURL:
$ dev_appserver.py ./app.yaml
INFO 2019-03-31 21:48:38,215 api_server.py:275] Starting API server at: http://localhost:54462
INFO 2019-03-31 21:48:38,225 api_server.py:265] Starting gRPC API server at: http://localhost:54464
WARNING 2019-03-31 21:48:38,227 dispatcher.py:338] Your python27 micro version is below 2.7.12, our current production version.
INFO 2019-03-31 21:48:38,386 dispatcher.py:256] Starting module "default" running at: http://localhost:8080
INFO 2019-03-31 21:48:38,395 admin_server.py:150] Starting admin server at: http://localhost:8000
INFO 2019-03-31 21:48:48,055 instance.py:294] Instance PID: 96100
INFO 2019-03-31 21:48:48,076 module.py:861] default: "GET /_ah/start HTTP/1.1" 404 -
ERROR 2019-03-31 21:48:48,113 wsgi.py:263]
Traceback (most recent call last):
File "/Users/me/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/Users/me/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/Users/me/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/Users/me/Documents/GitHub/activitylogs_api/main.py", line 19, in <module>
import endpoints
ImportError: No module named endpoints
INFO 2019-03-31 21:48:48,120 module.py:861] default: "GET /_ah/api/activitylogs/v1/list HTTP/1.1" 500 -
Однако список элементов python -m показывает эти:
google-конечные точки 4.8.0
google-endpoints-api-management 1.11.0
Выполняется ли сервер разработки в контексте какой-либо другой среды? Он работал в другой папке samples, но не здесь. Существует также папка ./lib с требованиями, установленными этой командой:
установка pip —целевая библиотека —требование requirements.txt —игнорировать-установлен
который, конечно, включает конечные точки…
$ gcloud version
Google Cloud SDK 237.0.0
app-engine-python 1.9.83
app-engine-python-extras 1.9.74
beta 2019.02.22
bq 2.0.42
cloud-datastore-emulator 2.1.0
core 2019.03.01
gsutil 4.37
kubectl 2019.03.01
Вот (начало) main.py:
# [START imports]
import endpoints
from endpoints import message_types
from endpoints import messages
from endpoints import remote
from datetime import datetime
# [END imports]
Интересно то, что если я ввожу python и пытаюсь импортировать, я получаю другую ошибку:
$ python
Python 2.7.10 (default, Feb 22 2019, 21:17:52)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import endpoints
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/me/Library/Python/2.7/lib/python/site-packages/endpoints/__init__.py", line 25, in <module>
from protorpc import message_types
ImportError: No module named protorpc
>>>
В то время как python3 показывает ту же ошибку, что и сервер приложений разработчика. Но я не понимаю, как он мог запускать сервер appengine как python3, потому что app.yaml имеет это:
среда выполнения: python27
Комментарии:
1. Можете ли вы заглянуть в main.py и посмотрите, что действительно есть «конечные точки импорта» … также просмотрите код, чтобы увидеть, как этот модуль может быть использован. Я не уверен, что отсутствующий модуль связан с «конечными точками Google Cloud». Фраза «конечные точки» является более общей.
2. первая строка — «импортировать конечные точки», за которой следует «сообщение об импорте из конечных точек». Команда pip в моем исходном сообщении создала папку с именем «endpoints» в ./lib с инициализацией .py в ней. У меня также установлен этот пакет в моей системе. Requirements.txt имеет «google-endpoints ==4.8.0 google-endpoints-api-management ==1.11.0». Что странно, так это то, что мой virtualenv (и system env) распознают конечные точки, но не сообщение. Документы Google указывают, что это будет так, и это сработало, когда я создавал их образец, но не сейчас.
3. Как вы думаете, возможно ли, что когда я запускаю appengine локально, он запускается как python3, а не 2.7? Я добавил еще несколько деталей к исходному сообщению.
4. В вашем журнале показано:
Your python27 micro version is below 2.7.12, our current production version.
так что нет, вы не используете python 3 🙂5. Вы видите конечные точки в
python -m pip -t lib list
?
Ответ №1:
отсутствовал appengine_config.py с:
from google.appengine.ext import vendor
# Add any libraries installed in the `lib` folder.
vendor.add('lib')