Python Click, Apache OpenWhisk, функции IBM Cloud, основные проблемы с выходом из системы - PullRequest
0 голосов
/ 28 июня 2018

У меня есть набор кода Python, который в основном выполняется через точки входа в инфраструктуру Click CLI.

Я изучаю, как превратить некоторые функции CLI в WebActions, и искал IBM Cloud Functions, в основном Apache OpenWhisk.

Я новичок в OpenWhisk и IBM CloudFunctions.

Я следую за Справочной документацией здесь:

https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions

пытается имитировать метод virtualenv.

Когда я перевожу их базовый пример в команду Click CLI следующим образом:

(ниже - содержимое файла __main__.py, который начинался как файл с именем hello_too.py, но изменялся следующим образом вместе с IBM Docs)

import click

@click.command()
@click.argument('params', nargs=-1)
def main(params):
    #name = args.get("name", "stranger")
    greeting = "Hello " + "foo" + "!"
    print(greeting)
    return {"greeting": greeting}

if __name__ == "__main__":
    main()

, а затем заархивируйте его и загрузите (в соответствии с их примером virtualenv) как веб-действие. Я получаю следующую ошибку

{
  "error": "The action did not produce a valid JSON response: Internal Server Error"
}

Я видел в некоторых других блогах, что запуск python с -i является хорошей проверкой работоспособности OpenWhisk.

Когда я запускаю этот код с -i, я получаю трассировку стека вокруг выхода из системы.

Traceback (most recent call last):
  File "hello_too.py", line 12, in <module>
    main()
  File "/Users/mcmasty/projects/ppf-github/experiments/ibm-api-connect/venv/lib/python2.7/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/Users/mcmasty/projects/ppf-github/experiments/ibm-api-connect/venv/lib/python2.7/site-packages/click/core.py", line 700, in main
    ctx.exit()
  File "/Users/mcmasty/projects/ppf-github/experiments/ibm-api-connect/venv/lib/python2.7/site-packages/click/core.py", line 484, in exit
    sys.exit(code)
SystemExit: 0

но когда я запускаю пример кода, не поддерживающий Click, интерактивный интерпретатор выдает жалобу.

Любой совет по простейшему пути к порту Выберите сценарии CLI для действий OpenWhisk / IBM Cloud Functions?

  • Я пытался заставить щелкнуть standalone_mode, чтобы изменить SystemExit поведение, но не смог заставить его работать
  • Я также пытался это сделать, назвав команду echo и используя опцию --main echo при создании действия OpenWhisk. (Тот же результат)
  • Я также пробовал много вариантов возврата JSON String (через json.dumps()), либо через return, либо через запись в stdout, как в zip-упаковке, так и в Docker-упаковке ... (те же результаты)

Поскольку словарь python является в основном жестко запрограммированным результатом, сейчас я лучше всего полагаю, что эта трассировка стека при запуске скрипта с включенным кликом является корнем моей проблемы при развертывании в IBM Cloud Functions.

Заранее спасибо.


Дополнительная информация в ответ на комментарии

Код предоставлен выше. Этот код находится в файле с именем __main__.py (согласно IBM Docs https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions)

затем, следуя Документам IBM, его ...

docker run --rm -v "$PWD:/tmp" openwhisk/python2action    bash  -c "cd tmp && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt"  

единственное требование в needs.txt - click

затем также по IBM Docs

zip -r hello_too.zip virtualenv __main__.py  

и проверка работоспособности

python -i hello_too.zip  

Выдает исключение SystemExit / трассировку стека, как в примере выше.

Но

python hello_too.zip    

завершается нормально.

Затем разверните в облачные функции / веб-действия

ibmcloud wsk action create hello_too --kind python:2 hello_too.zip --web true 

затем вызвать через командную строку

ibmcloud wsk action invoke --result hello_too  

Я получаю следующее сообщение:

{
"error": "The action did not produce a valid JSON response: Internal Server Error"
}  

но жестко закодированный ответ

return {"greeting": greeting}  

идентичен их примеру кода в разделе «Создание и вызов действия Python» https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions

поэтому я предполагаю, что это не является основной причиной проблемы. (Я запустил их пример кода, как указано в документации, и возвращение Python dict работало нормально.)

Просто когда я пытаюсь использовать клик-версию python, я застреваю.

1 Ответ

0 голосов
/ 29 июня 2018

Модуль click вызывает ошибку во время выполнения, которая убивает основной процесс Python, выполняющий код.

Модуль click предназначен для создания инструментов интерфейса командной строки. Код Python для действий OpenWhisk динамически оценивается и вызывается существующим скриптом Python. Вам нужно будет перефакторизовать ваше приложение, чтобы представить основные функции через необработанные функции, чем модуль click.

...