pkgxdev / pkgx

run anything
https://pkgx.sh
Apache License 2.0
9k stars 1.36k forks source link

Proposal: prefer local installs for implicit depedencies #1044

Open jhheider opened 1 month ago

jhheider commented 1 month ago

Currently, pkgx uses this loop to bring in dependencies automatically to a dev environment, based on contents. This can cause some surprising behaviors like #1041 .

It would probably be better to bring in dependencies only when missing. This could potentially be generalized into a async function load_implicit_deps(binname: string, dep: PackageRequirement). This would add some load time to a dev env, unfortunately, but it means not loading our git in if it is already present on the path.

Since dependencies can always be explicit in the YAML file, this should be a less surprising at the cost of checking the path on load, and result in fewer instances where a user needs to forcibly "unload" a pkgx package from their environment due to conflicts.

mxcl commented 4 weeks ago

I have thought this was right many times.

mxcl commented 4 weeks ago

I guess the issue is “magic” where you don’t know what will happen because you don’t know what pkgx will decide particularly.

aberres commented 2 weeks ago

I would also be interested in "partial" dev environments. We have git around, python is managed by virtual environments managed with uv, and node might be handled with volta.

I would be happy to explicitly exclude some integrations to avoid "magic".

Or the way around: Something like dev +pnpm +curl +yy - the same as env but using the logic dev uses to resolve versions.

aberres commented 2 weeks ago

Or maybe an opt-out with something like dev -python.org -git.