有无类似esbuild的Serverless Python独立打包工具?
实现Python Serverless Framework的单函数独立打包(类似Node.js esbuild效果)
核心方案:用serverless-python-requirements插件
这是目前最成熟的Python Serverless打包插件,能精准实现每个函数仅打包自身代码和必要依赖,解决全量上传的问题。
步骤1:安装插件
npm install --save-dev serverless-python-requirements
步骤2:调整项目结构(推荐)
把每个函数放到独立目录,方便精准打包:
your-project/ functions/ user-service/ handler.py requirements.txt # 仅当前函数的依赖 order-service/ handler.py requirements.txt serverless.yml
步骤3:配置serverless.yml
关键是开启individually: true,同时配合函数级的include/exclude规则,确保只打包目标函数:
service: your-python-service plugins: - serverless-python-requirements custom: pythonRequirements: dockerizePip: non-linux # 本地非Linux环境必加,避免依赖兼容问题 slim: true # 剔除依赖中的冗余文件(文档、测试代码等),缩小包体积 individually: true # 核心:为每个函数单独打包 zip: true # 生成独立的zip包 exclude: - .git/** - __pycache__/** - tests/** - ./**/*.pyc functions: userService: handler: functions/user-service/handler.lambda_handler package: include: - functions/user-service/** exclude: - '!functions/user-service/**' # 强制排除其他所有文件 orderService: handler: functions/order-service/handler.lambda_handler package: include: - functions/order-service/** exclude: - '!functions/order-service/**'
步骤4:验证打包效果
运行serverless package,查看.serverless目录下的zip包——每个函数的zip里只会包含自身目录的代码和对应的依赖,没有多余文件。
关于你试过的插件失效原因
serverless-python-individually和serverless-package-python-functions仅处理代码拆分,不负责依赖的筛选和打包,所以会出现包体积依然很大的情况。而serverless-python-requirements会自动分析每个函数的依赖,仅打包必要的库,同时配合代码拆分,完全匹配你要的Node.js esbuild效果。
额外优化
如果有函数共享的工具代码,可以把共享代码放到shared/目录,然后在每个函数的package.include里添加shared/**,插件会自动把共享代码打包进对应的函数包。
内容的提问来源于stack exchange,提问作者KrLiTs
相关产品推荐
相关产品推荐

