Нет модуля с именами предупреждений при локальном запуске 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.

Я обнаружил, что это работает правильно, если я использую абсолютные пути вместо этого.

Другие вопросы по тегам