astral-sh / rye

a Hassle-Free Python Experience
https://rye.astral.sh
MIT License
13.26k stars 456 forks source link

Extract Python installation code into a stand alone project #583

Open ksamuel opened 6 months ago

ksamuel commented 6 months ago

As discussed with you yesterday, I think it would be benefit to extract the part of rye that is responsible to download and install Python and expose it's API programmatically as a lib so that it could be used in other tools.

This would allow the field of Python bootstrapping to make several explorations based on a commons solid basis:

All that would be easier if one didn't have to include the entire project management part of rye, which is unnecessary for those steps.

There is already tremendous value for a robust, cross-plateform, unified way of installing and calling Python, and this project is a hint of that.

This would also allow for more sources of contributions, for things like:

Eventually, if this gets popular, in a few years, one can imagine proposing such tool to the core devs as the main way to install Python.

jankatins commented 6 months ago

This might be interesting for @jdx, the creator of https://github.com/jdx/mise

jdx commented 6 months ago

Unless I'm missing something mise already solves all of these use-cases. Some of them may not be documented clearly how to solve and some could benefit from DX improvements but they are all possible today I think. This is one related gap which is actually a pretty easy problem I just haven't got around to.

Lazy-loading is also possible but certainly would require executing mise in a not-obvious way. What would be more idiomatic in mise is declaring the minor versions you need and installing them ahead of time in order of preference, e.g.: python 3.11 3.12 3.10.

mise is not a "lib" but since mise and rye are both rust projects I don't see how that would make sense for either project except wrapping the rust CLIs.

mise does lack non-WSL windows support though.

cnpryer commented 6 months ago

I really like this idea, but wouldn't it be wise to publish a public API after the project has been somewhat stabilized? Especially the parts of Rye that leverage the Python installation logic.

Also, adding support for a public API at this stage could be a lot to ask from what is currently a one-man show.