logoalt Hacker News

/usr/bin/env -S uv run

125 pointsby jcbhmr11/20/202440 commentsview on HN

Comments

BiteCode_dev11/21/2024

Other neat tricks with uvx (uv equivalent of npx) to run one time commands in some contexts:

- alias download_mp3="uvx --no-cache --from yt-dlp[default] yt-dlp --extract-audio --audio-format mp3" to download sound from Youtube videos, SoundCloud pages, etc. This update yt-dlp every time, which is required given the counter measures change so often and the dl rarely affect the total processing time anyway (requires ffmpeg).

- "uvx --with <package> --with pyqt5 --from qtconsole jupyter qtconsole" starts a qtconsole (GUI version of ipython) with <package> installed so you can test it quickly. Temp venv, everything cached so next time it's instant, one single copy of pyqt5 for the current use no matter how many times you run those.

- "uvx --with virtualenv pipx run pipsi install nodejs-bin". Ok it's useless, but it's fun that it even works :)

uv's cache system and downloads optimization are quite smart, as Charlie marsh (astral CEO) explains in the interview: https://www.bitecode.dev/p/charlie-marsh-on-astral-uv-and-th...

smaddox11/21/2024

I've been using this for a few weeks now, and it's really handy. But I did learn the hard way that it fails if you don't have internet connection, even if you already have the venv cached.

show 2 replies
mrweasel11/21/2024

While neat, doesn't it also comes with certain issues?

Startup times has to be slower, but probably only for the first run?

There's a some level of violation of the "Principle Of Least Surprise", depending on the setting. For some it will be the reverse, the script they got just works, without any setup or package installation. For others we'll wonder why it just started downloading a bunch of packages we already have.

Probably not the greatest idea for production environments, where you should not or can not just pull in packages from the internet.

It's really cool that it works, but I think I'd recommended using it highly selectively.

show 3 replies
thewisenerd11/21/2024

this builds upon PEP 723, which is "accepted", so it's likely here to stay.

https://peps.python.org/pep-0723/

I've been very slowly migrating scripts to work with this, and `pipx run`. glad to know uv has also picked it up.

skavi11/21/2024

reminds me of nix-shell shebang [0] which enables a similar pattern for scripts of arbitrary languages.

[0]: https://nixos.wiki/wiki/Nix-shell_shebang

p4bl011/21/2024

It's a neat trick, but it still depends on uv being installed and network connectivity.

What's the advantage of this that makes it worth despite these constraints, compared to e.g. using pyinstaller [1] to build and distribute a single executable file with the python interpreter and all the dependencies of your project bundled in it in the exact versions you chose in your development virtual environment?

[1] https://pyinstaller.org/

show 2 replies
ginko11/21/2024

Doesn't look like my Ubuntu machine comes with 'uv' installed at least. Can't say I've ever heard of it either.

show 1 reply
kixpanganiban11/21/2024

Curious - how many containers and machines images these days come with uv by default?

delusional11/21/2024

It's worth noting that this is not portable. The /usr/bin/env -S flag is not standardized by posix and not implemented on busybox.

show 1 reply
jauntywundrkind11/21/2024

Zx adds a couple nice ease of use things to node.js, designed to help shell scripting. Among other things, if you call /usr/bin/env zx, it will automatically retrieve any module imports you have in your code! https://github.com/google/zx

jas3911/21/2024

I have been doing this for a while. Voila:

#!/usr/bin/env -S uv run -q --no-project --python ">=3.12" --with "openai"

lofaszvanitt11/21/2024

Who wants to give a script rights to download anything and configure and whatever? For development, sure it's ok.

theanonymousone11/21/2024

Maybe surprisingly, JBang has offered this functionality for Java since 2020. Happy we have it un Python too, now.

rikthevik11/21/2024

Fantastic. I'm very impressed with Simon Willison in general (what a dynamo) and this in particular.

show 1 reply
seivan11/21/2024

[dead]

ryandvm11/21/2024

What's `uv`? Oh, another Python package manager. Is it a new lunar cycle already?

Not to shit on anyone's hard work, but how is Python the only popular language whose package management situation is always actively getting more complicated?

I used to love Python, but I won't touch it anymore because I just don't have it in me to learn what the new idiomatic package management practices are in any given Python ecosystem.

For any aspiring language designers out there - take good notes about what happens if you don't bake package management into the official tooling.

show 2 replies