mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-09 22:35:01 +00:00
![]() Adds support for disabling installation from pre-built wheels i.e. the package must be built from source locally. We will still always use pre-built wheels for metadata during resolution. Available via `--no-binary` and `--no-binary-package <name>` flags in `pip install` and `pip sync`. There is no flag for `pip compile` since no installation happens there. ``` --no-binary Don't install pre-built wheels. When enabled, all installed packages will be installed from a source distribution. The resolver will still use pre-built wheels for metadata. --no-binary-package <NO_BINARY_PACKAGE> Don't install pre-built wheels for a specific package. When enabled, the specified packages will be installed from a source distribution. The resolver will still use pre-built wheels for metadata. ``` When packages are already installed, the `--no-binary` flag will have no affect without the `--reinstall` flag. In the future, I'd like to change this by tracking if a local distribution is from a pre-built wheel or a locally-built wheel. However, this is significantly more complex and different than `pip`'s behavior so deferring for now. For reference, `pip`'s flag works as follows: ``` --no-binary <format_control> Do not use binary packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either ":all:" to disable all binary packages, ":none:" to empty the set (notice the colons), or one or more package names with commas between them (no colons). Note that some packages are tricky to compile and may fail to install when this option is used on them. ``` Note we are not matching the exact `pip` interface here because it seems complicated to use. I think we may want to consider adjusting our interface for this behavior since we're not entirely compatible anyway e.g. I think `--force-build` and `--force-build-package` are clearer names. We could also consider matching the `pip` interface or only allowing `--no-binary <package>` for compatibility. We can of course do whatever we want in our _own_ install interfaces later. Additionally, we may want to further consider the semantics of `--no-binary`. For example, if I run `pip install pydantic --no-binary` I expect _just_ Pydantic to be installed without binaries but by default we will build all of Pydantic's dependencies too. This work was prompted by #895, as it is much easier to measure performance gains from building source distributions if we have a flag to ensure we actually build source distributions. Additionally, this is a flag I have used frequently in production to debug packages that ship Cythonized wheels. |
||
---|---|---|
.. | ||
src | ||
.gitignore | ||
builder.dockerfile | ||
Cargo.toml | ||
test_sdist_building.sh |