是否可以使用/上传自己的库到 IBM Cloud Functions?还是仅限于预装的软件包?我打算使用 Python 作为编程语言。
3 回答
您可以捆绑自己的依赖项。请参阅此处的文档https://github.com/apache/incubator-openwhisk/blob/master/docs/actions-python.md#packaging-python-actions-with-a-virtual-environment-in-zip-files使用您的库创建虚拟环境。文档提供了一个通过requirements.txt
.
可以使用比预安装的更多的库。IBM Cloud Functions 文档和链接的博客文章中有一些提示和技巧,例如,这里是 Python。
对于 Python,您可以使用虚拟环境并将其打包,也可以使用包含所需 Python 文件的 zip 文件。虚拟环境可能更容易开始,但最终可能会有很多不必要的文件。我更喜欢下载所需的文件并将它们自己放入一个 zip 文件中。当然,这只是在一定程度上是可控的。
我在有关无服务器 GitHub 流量统计的 IBM Cloud 解决方案教程中使用了该方法。您可以在此 GitHub 存储库中找到源代码,包括我为 Python 操作创建的 zip 文件(请参阅函数文件夹)。
您可以使用任何 docker 镜像来执行您的操作,只要这些镜像在 Docker Hub 上可用。因此,您可以使用您的库创建自己的图像。
因此,例如,如果您想要添加 python 库的自己的图像,该库yattag
是从 python 代码生成 HTML 的库。
你可以这样写一个 Dockerfile:
FROM openwhisk/python3action
RUN pip install yattag
然后构建并推送
$ docker build -t docker.io/msciab/python3action-yattag:latest .
$ docker push docker.io/msciab/python3action-yattag
现在,您有了一个可以在 OpenWhisk/IBM Cloud 中使用的公共映像。
这是一个使用 yattag 的简单 python hello world:
from yattag import Doc
def main(dict):
doc, tag, text = Doc().tagtext()
with tag('h1'):
text('Hello world!')
dict['body'] = doc.getvalue()
return dict
创建并运行操作:
$ wsk action create hello-yattag hello.py --web true --docker msciab/python3action-yattag
$ curl $(wsk action get hello-yattag --url|tail -1)
<h1>Hello world!</h1>