Нет модуля с именами предупреждений при локальном запуске GAE в virtualenv
Я пытаюсь запустить приложение GAE локально в виртуальной среде.
Я следовал этим двум статьям [1], [2] как ссылка на настройку, но когда я source evn/bin/activate
а потом dev_appserver.py .
, он продолжает поднимать ошибку ImportError: No module named warnings
(подробнее след ниже)
Удивительно, но если я запускаю его, не активируя виртуальную среду, просто запустив dev_appserver.py .
внутри корня проекта он работает без проблем.
Есть ли решение или решение этой проблемы?
INFO 2017-08-31 14:09:36,293 devappserver2.py:116] Skipping SDK update check.
INFO 2017-08-31 14:09:36,354 api_server.py:313] Starting API server at: http://localhost:52608
INFO 2017-08-31 14:09:36,357 dispatcher.py:226] Starting module "default" running at: http://localhost:8080
INFO 2017-08-31 14:09:36,359 admin_server.py:116] Starting admin server at: http://localhost:8000
Traceback (most recent call last):
File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/_python_runtime.py", line 103, in <module>
_run_file(__file__, globals())
File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/_python_runtime.py", line 97, in _run_file
execfile(_PATHS.script_file(script_name), globals_)
File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime.py", line 192, in <module>
main()
File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime.py", line 172, in main
sandbox.enable_sandbox(config)
File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 326, in enable_sandbox
__import__('%s.threading' % dist27.__name__)
File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/dist27/threading.py", line 11, in <module>
import warnings
File "/usr/local/share/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 1076, in load_module
raise ImportError('No module named %s' % fullname)
ImportError: No module named warnings
ERROR 2017-08-31 14:09:39,070 instance.py:280] Cannot connect to the instance on localhost:52366
3 ответа
Я решил это, удалив из skip_files
из моего .yaml
- venv
линия. venv
моя папка virtualenv, и у меня все еще есть - ^venv$
линия. В случае, если это кому-то помогает;-)
Все зависимости для стандартных приложений GAE (которые не предоставляются GAE) должны быть установлены в самом приложении, а не в локальной системе. См. Использование сторонних библиотек.
Поскольку GAE не заботятся о ваших локальных системных библиотеках (помимо базовой установки python 2.7, необходимой для запуска сервера разработки), использование virtualenv для разработки стандартных приложений env GAE не имеет большого смысла.
Использование virtualenv, как предлагается в упомянутых вами статьях, может вызвать проблемы:
- локальные библиотеки Python могут мешать эквивалентным библиотекам GAE, предоставляемым во время выполнения (из SDK) при локальном запуске (я подозреваю, что это как-то то, что вы испытываете)
- во время развертывания содержание
lib
каталог (который включает в себя все пакеты сайта для вашей установки на python) будет загружен в GAE, что может привести к конфликтам с библиотеками, предоставляемыми во время выполнения GAE, или к превышению квоты файла приложения.
Поэтому я предлагаю отказаться от virtualenv (что, в некотором смысле, вы сделали, когда пропустили активацию virtualenv), и вместо этого следуйте официальной документации.
У меня была эта проблема при запуске двух проектов AppEngine в отдельных каталогах одновременно с использованием dev_appserver.py в virtualenv.
Я обнаружил, что это работает правильно, если я использую абсолютные пути вместо этого.