我花了几天的时间试图找出如何在使用诗歌的时候最好地构建一个Python Lambda包。我发现了一些博客,它们概述了相同的技术,但在我的情况下不起作用。博客中提供的解决方案是使用pip install
将所需的依赖项安装到特定的目录中并将其压缩。
poetry run pip install -t dist/lambda .
cd dist/lambda
zip -r ../lambda.zip .
然而,如果你在诗歌中使用路径依赖,这是行不通的。对于任何本地依赖项,您都会从pip中获得一个错误,说明pip._vendor.pkg_resources.RequirementParseError: Invalid URL:
。
我确实遇到了诗歌束插件,它看上去很有希望。使用它确实有效,因为它将所需的依赖项和项目本身安装到选定的目标目录中。
poetry self add poetry-plugin-bundle
poetry bundle venv .venv-lambda
cd .venv-lambda/lib/python*/site-packages/
zip -r ../../../../dist/lambda.zip .
这种方法的问题在于它安装的不仅仅是主线依赖项,还包括dev
和test
依赖项。没有选项可以指定要包含或排除哪个依赖项组。有一个具有PR的公开发行正在等待合并以解决这个问题。一旦解决了这一问题,这很可能是理想的解决方案。
在那之前,我需要一些不同的/更好的东西。
发布于 2022-11-02 16:19:51
最后,我从AWS中找到了这份文件,用于如何从Python虚拟环境中创建lambda存档。使用诗歌的install命令,我能够将主要的运行时依赖项安装到所创建的虚拟环境中,包括任何基于本地路径的依赖项。但是,这并没有安装项目本身,所以在归档之前需要复制源代码。在我的例子中,我使用一个专用的源目录/模块作为代码。
poetry install --only main --sync
mkdir -p dist/lambda-package
cp --recursive .venv/lib/python*/site-packages/* dist/lambda-package/
cp --recursive my_project_source_directory dist/lambda-package/
cd dist/lambda-package
zip -r ../dist/lambda.zip .
上面的命令是我在CI构建中使用的。使用本地.venv
目录是因为以下诗词设置virtualenvs.in-project
设置为true
。
要做到这一点,需要做的另一件事是不要使用基于可编辑路径的依赖关系,或者至少在开发期间只在本地这样做。将它们标记为可编辑不会将依赖项安装到虚拟环境中,而是只创建一个指向项目源代码的链接。这将不会在创建zip文件时得到。
这并不完美,因为可能有更多的绑定超出必要,但它确实删除了诗歌插件解决方案中的任何dev
和test
依赖项。另外,因为在我的CI构建服务器上,我在虚拟环境中缓存已安装的依赖项,这意味着在构建结束时,没有任何dev
或test
依赖项在每次运行时被缓存和安装。
我希望这对处于类似情况的其他人有所帮助。
发布于 2022-11-06 19:47:09
我就是这么做的:
rm -rf dist package
poetry install --only main --sync
poetry build
poetry run pip install --upgrade -t package dist/*.whl
cd package; mkdir -p out; zip -r -q out/mylambda.zip . -x '*.pyc'
https://stackoverflow.com/questions/74292510
复制相似问题