Модуль Python не найден при запуске локального сервера разработки webapp2 (Python) в Google Cloud SDK

1

Я запускаю webapp2 в Google Cloud SDK и использую модуль Naked для запуска скриптов node.js из python2 в поле Vagrant. При запуске сервера, который имеет этот фрагмент кода

from Naked.toolshed.shell import muterun_js


def get_signed_hash(username):

    response_from_js = muterun_js('./views/api/generateSignedTransaction.js',
                                  nonce)
    signed_hash = response_from_js.stdout
    print('0x' + signed_hash)

Я получаю это сообщение об ошибке

ImportError: No module named Naked.toolshed.shell

Я также использую библиотеку requests и это не вызывает никаких проблем. Пробовал отлаживать проблему, касающуюся расположения пакетов, они оба находятся в одном и том же месте:

>>> import requests
>>> print(requests.__file__)
/home/vagrant/.local/lib/python2.7/site-packages/requests/__init__.pyc
>>> import Naked
>>> print(Naked.__file__)
/home/vagrant/.local/lib/python2.7/site-packages/Naked/__init__.pyc

Infact Я запускал сценарий в том же месте, что и автономный файл, вызывающий get_signed_hash('username') и он запускается успешно. Есть ли другое место, которое мне нужно проверить?

  • 1
    Вы запускаете это на App Engine Standard? Потому что вы не можете использовать библиотеки, которые зависят от заголовков и расширений C, а Naked их использует.
Теги:
python-2.7
google-app-engine

1 ответ

1

Для стандартного окружения приложений первого поколения необходимо установить зависимости внутри приложения (или поставщика). Недостаточно иметь их в системных site-packages (где обычные, автономные приложения загружают библиотеки). Даже если вы каким-то образом убедите локальный сервер разработки для запуска приложения, он не будет работать при загрузке в GAE, поскольку GAE не имеет доступа к вашей локальной системе.

Как правило, вы устанавливаете свою библиотеку (и все ее зависимости) внутри каталога lib внутри вашего каталога приложений, чтобы они могли быть загружены в GAE вместе с вашим приложением. См. Копирование сторонней библиотеки.

В качестве альтернативы вы можете попытаться просто символизировать каталог Naked в вашем каталоге lib, который может работать, если все остальные зависимости уже удовлетворяются аналогичным образом. См. Раздел Как мне получить доступ к библиотеке, выпущенной из модуля, в Python Google App Engine?

  • 0
    Я пытаюсь использовать subprocess.check_output и subprocess.call но оба они недоступны, хотя они являются частью официальных модулей, как @Mangu указал в комментариях, а также по общей ссылке, которую вы не можете включать в модули с С зависимости. Нужно ли использовать процесс, данный вами, для поставляемых модулей?
  • 0
    Я не думаю, что вы также можете использовать subprocess из-за другого ограничения песочницы - делать недопустимые системные вызовы - не может запускать процессы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню