anomalyco/sst · error
failed to read requirements file: %w
Error message
failed to read requirements file: %w
What it means
filterEditableInstalls reads the (filtered) requirements.txt via os.ReadFile (build.go:1011) to strip editable (-e) local-path installs, which produce symlinks that break in Lambda. If the input file cannot be read — typically because it does not exist or is unreadable — this wrapped error is returned. It means the earlier step that was supposed to generate that requirements file did not produce it at the expected path.
Source
Thrown at pkg/runtime/python/build.go:1013
if err := precompilePythonFiles(ctx, input, depsCacheDir); err != nil {
slog.Warn("failed to precompile dependencies in cache", "error", err)
}
if err := copyDependencyPackages(depsCacheDir, input.Out()); err != nil {
return fmt.Errorf("failed to copy dependencies to artifact: %w", err)
}
os.Remove(filteredRequirementsPath)
return nil
}
// filterEditableInstalls removes editable (-e) local path installs from requirements.txt.
// Editable installs create symlinks which won't work in Lambda.
func filterEditableInstalls(inputPath, outputPath string) error {
content, err := os.ReadFile(inputPath)
if err != nil {
return fmt.Errorf("failed to read requirements file: %w", err)
}
lines := strings.Split(string(content), "\n")
var filteredLines []string
for _, line := range lines {
originalLine := line
line = strings.TrimSpace(line)
// Skip empty lines and comments
if line == "" || strings.HasPrefix(line, "#") {
filteredLines = append(filteredLines, originalLine)
continue
}
if strings.HasPrefix(line, "-e ") {
editablePath := strings.TrimSpace(strings.TrimPrefix(line, "-e "))
View on GitHub (pinned to a0bd20f762)
Solutions
- Confirm the requirements file exists at the path reported in the wrapped ENOENT error
- Check that an earlier generation step (pyproject/requirements export) succeeded — fix the root failure and rebuild
- Avoid concurrent builds in the same workspace that could delete the filtered requirements file mid-run
- Verify read permissions on the file and its directory, especially in containers or mounted volumes
Example fix
// before: workspace missing the generated file ls .sst/functions/requirements.txt # not found // after: clean and rebuild so requirements are regenerated rm -rf .sst && sst deploy
Defensive patterns
Strategy: validation
Validate before calling
# ensure the requirements source exists before building
[ -f requirements.txt ] || [ -f pyproject.toml ] || { echo "no requirements source"; exit 1; }
# avoid deleting the workspace mid-build; do a clean rebuild if in doubt
# rm -rf .sst && sst deploy Prevention
- Never hand-edit or delete files under .sst/ while a build is running
- After failed builds, run a clean rebuild (rm -rf .sst) so intermediate files are regenerated
- Keep workspace paths short and ASCII to avoid path-resolution issues in containers
- Check volume mount flags (rw) in CI containers
When it happens
Trigger: Specifically: os.ReadFile(inputPath) returns an error when filterEditableInstalls runs from copySyncedDependencies or its anonymous caller — e.g. the generated filtered requirements path was never created, was already deleted (note os.Remove(filteredRequirementsPath) at build.go:1003 removes it after use), or permissions deny reading.
Common situations: Running the build in a container/workspace where the relative requirements.txt path (e.g. ./vendored_sst references) doesn't resolve; a prior build step failed silently leaving no requirements file; file removed by a concurrent build sharing the workspace; read permissions on mounted volumes.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- failed to move extracted package: %w
- failed to create output directory: %w
- failed to copy %s to %s: %w
- failed to copy source files: %w
- failed to copy synced dependencies: %w
AI-assisted analysis of anomalyco/sst@a0bd20f762 (2026-08-30).
Data as JSON: /api/errors/d5c7f3790198ce72.
Report an issue: GitHub.