适用于 WeasyPrint 和 jinja2 的 AWS Lambda 层

问题描述 投票:0回答:3

我正在尝试为 WeasyPrint 和 jinja2 创建一个 AWS Lambda 层。我尝试了以下步骤:

下载包:

pip3 install weasyprint
pip3 install jinja2

创建一个 zip 文件并将其分层上传。但它一直抛出模块未找到错误。

为了解决上述错误,我按照此处提到的步骤操作: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-import-module-error-python/

但现在它抛出以下错误:

0-0': gobject-2.0-0: cannot open shared object file: No such file or directory.  Additionally, ctypes.util.find_library() did not manage to locate a library called 'gobject-2.0-0'
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/lambda_function.py", line 3, in <module>
    from weasyprint import HTML

正如安装步骤中提到的,我们需要安装 GTK3 库。但是我们如何在 aws lambda 上解决这个问题呢?有没有人有什么想法。

谢谢

谢谢

python-3.x aws-lambda jinja2 aws-lambda-layers weasyprint
3个回答
2
投票

weasyprint
需要一些系统依赖项,您无法使用 pip 安装这些依赖项。 AWS Lambda 在
Amazon Linux 2
上运行,不包含某些系统依赖项,例如
Pango
。 要解决这个问题,您必须创建具有所有所需依赖项的层。为此,您可以使用 Kotify 准备的脚本,这在 weasyprint 官方文档中实际提到。

https://github.com/kotify/cloud-print-utils

https://github.com/Kozea/WeasyPrint/issues/1003

请注意,您必须使用 Python 3.8 运行时。


0
投票

安装 lambda 层打包时,您应该使用

pip install -t <directory path>
选项,将所有内容安装到特定文件夹。另外,对于 Python 层,结构应该是
python/<your dependencies>
python/lib/python3.9/site-packages/<your dependencies>

您可以在文档

中看到它

0
投票

您可以使用此存储库创建 jinja 层。您可以根据它创建满足您的两个要求的配置。使用 CLI,您可以创建将自定义层部署到您的 AWS 账户:

https://github.com/imperva/aws-lambda-layer

© www.soinside.com 2019 - 2024. All rights reserved.