我正在尝试为 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 上解决这个问题呢?有没有人有什么想法。
谢谢
谢谢
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 运行时。
安装 lambda 层打包时,您应该使用
pip install -t <directory path>
选项,将所有内容安装到特定文件夹。另外,对于 Python 层,结构应该是 python/<your dependencies>
或 python/lib/python3.9/site-packages/<your dependencies>
您可以在文档
中看到它您可以使用此存储库创建 jinja 层。您可以根据它创建满足您的两个要求的配置。使用 CLI,您可以创建将自定义层部署到您的 AWS 账户: