aws / aws/aws-lambda-builders

Feature request: Add support for pyproject.toml

Open
#688 4 comments 12 reactions 0 assignees View on GitHub
area/workflow/python_pip type/feature
Dominant language
Python
Stars
380
Forks
161
Avg merge
1d 1h
Merged PRs (30d)
2

Description

### Describe your idea/feature/enhancement

As the Python ecosystem moves towards `pyproject.toml` as the standard for defining build system requirements and managing dependencies, it would be highly beneficial if there was a lambda builder to recognize and handle this file natively. Using `setup.py` is gradually being phased out in favor of `pyproject.toml` which modern package managers (like Poetry) support to align with PEP 517 and PEP 518 standards.

Currently, we either have to manually export our dependencies to a requirements.txt file, or have `makefile` as the build method in the `template.yaml` where the makefile is exporting the deps to a `requirement.txt` before preparing the function:
```yaml
# template.yaml
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.12
Metadata:
BuildMethod: makefile
```

```makefile
build-HelloWorldFunction:
poetry export -f requirements.txt --output requirements.txt --without-hashes
pip install --target "$(ARTIFACTS_DIR)" -r requirements.txt
cp -r *.py $(ARTIFACTS_DIR)
```

This can be tedious when having to deal with multiple functions.

### Proposal

Implement a builder, similar to `python_pip` that parses `pyproject.toml`, recognizes the `build-backend` defined in `pyproject.toml` (such as `poetry` or `flit`) and handles dependencies installation accordingly. This way when invoking `sam build` the existence of `pyproject.toml` is also taken into consideration (and not only `requirements.txt` and `setup.py`). Based on this, it should be able to select the appropriate builder to use.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.