如何使用Poetry创建可部署的Python Lambda压缩包?
解决Poetry构建Python Lambda包的常见问题
问题概述
- 采用常规
pip install方式打包(代码如下)时,因项目包含Poetry的path dependencies,触发报错:pip._vendor.pkg_resources.RequirementParseError: Invalid URL:poetry run pip install -t dist/lambda . cd dist/lambda zip -r ../lambda.zip . - 使用Poetry Bundle Plugin虽能完成项目及依赖的目录安装,但会一并打包dev、test组依赖,且插件暂不支持指定依赖组,相关修复PR尚未合并
替代解决方案
方案1:导出生产依赖后用pip安装
- 导出不含dev、test组的生产环境依赖:
poetry export --without-hashes --without dev,test -f requirements.txt --output requirements.txt
- 将项目及依赖安装到目标目录:
pip install -t dist/lambda . -r requirements.txt
- 打包成Lambda可用的zip包:
cd dist/lambda zip -r ../lambda.zip .
注意:若path依赖为本地项目,需先将该依赖安装至当前环境,或确保导出的requirements.txt中路径引用有效
方案2:构建wheel包后单独安装
- 先构建项目的wheel包:
poetry build --format wheel
- 创建临时目录,分别安装wheel包和生产依赖:
mkdir -p dist/lambda # 安装项目本身(不带依赖) pip install -t dist/lambda dist/*.whl --no-deps # 导出并安装生产依赖 poetry export --without-hashes --without dev,test -f requirements.txt --output temp_requirements.txt pip install -t dist/lambda -r temp_requirements.txt rm temp_requirements.txt
- 完成打包:
cd dist/lambda zip -r ../lambda.zip .
方案3:Bundle Plugin安装后手动清理依赖
若已用Bundle Plugin完成安装,可手动删除dev、test相关依赖目录:
- 先用Bundle Plugin安装所有依赖:
poetry bundle install --directory dist/lambda
- 删除指定的dev/test依赖(需根据项目依赖列表明确目标,如
pytest、black等):
rm -rf dist/lambda/pytest* dist/lambda/black*
- 执行打包:
cd dist/lambda zip -r ../lambda.zip .
注意:此方法适合依赖较少的项目,需准确识别dev/test依赖包名
内容的提问来源于stack exchange,提问作者loesak
相关产品推荐
相关产品推荐

