indygreg / indygreg/PyOxidizer

Feature request: incremental builds

Open
#330 0 comments 4 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
6.2k
Forks
256
PR merge metrics
No merged PRs in 30d

Description

For a project I'm working on, `pyoxidizer build` takes about 8 minutes on Windows, 1:16 of which is in `cargo build`, and most of the rest of which is in Pip. My workflow typically involves tweaking the `pyoxidizer.bzl` file or one of my Python modules and rebuilding. In theory, a subsequent run of `pyoxidizer build` could do as little as re-compiling the tweaked Python module, re-packing the resulting byte code, and re-linking. I imagine it'd be harder to keep track of what exactly changed in a `pyoxidizer.bzl` file than noticing that a certain set of Python modules have been updated. However, if the installation target stays put, Pip can generally avoid duplicating work, so PyOxidizer could offload some of the change-tracking of `pyoxidizer.bzl` to Pip. Also, Cargo can forgo re-compiling if it's compiling in the same place each time. This suggests to me that PyOxidizer move from building in a temporary directory to building in the directory set by [`set_build_path()`](https://pyoxidizer.readthedocs.io/en/v0.10.3/config_global_state.html#config-set-build-path).

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the `pyoxidizer build` entry point and the `set_build_path()` configuration referenced in the issue. Trace how builds currently use a temporary directory and how Cargo and Pip are invoked. Done means repeated builds reuse the configured build path and avoid unnecessary recompilation, repacking, and installation work.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, rust
Domain
build-system, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.