mirror of
https://github.com/balkian/balkian.github.com.git
synced 2025-02-22 09:45:07 +00:00
post about uv
This commit is contained in:
parent
50b6c6995e
commit
2c7eb133a9
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Emacs
|
title: Emacs
|
||||||
description: Configuration files and tricks for emacs
|
description: Configuration files and tricks for emacs
|
||||||
|
image: "img/emacs.png"
|
||||||
tags:
|
tags:
|
||||||
- emacs
|
- emacs
|
||||||
- org
|
- org
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
title: Linux
|
title: Linux
|
||||||
author: "Fernando Sánchez"
|
author: "Fernando Sánchez"
|
||||||
description: Tips and tricks for GNU/Linux and Unix
|
description: Tips and tricks for GNU/Linux and Unix
|
||||||
|
image: "img/linux.png"
|
||||||
categories:
|
categories:
|
||||||
- linux
|
- linux
|
||||||
tags:
|
tags:
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Python
|
title: Python
|
||||||
description: Tips and useful libraries for python developers
|
description: Tips and useful libraries for python developers
|
||||||
|
image: "img/python.png"
|
||||||
categories:
|
categories:
|
||||||
- programming
|
- programming
|
||||||
tags:
|
tags:
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Raspberry Pi
|
title: Raspberry Pi
|
||||||
description: Tools, links and configuration for your Raspberry Pi
|
description: Tools, links and configuration for your Raspberry Pi
|
||||||
|
image: img/rpi.png
|
||||||
tags:
|
tags:
|
||||||
- rpi
|
- rpi
|
||||||
---
|
---
|
||||||
|
115
content/post/2025-uv.md
Normal file
115
content/post/2025-uv.md
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
---
|
||||||
|
title: "uv - One rust tool to rule all pythons"
|
||||||
|
description:
|
||||||
|
date: 2025-02-17T23:02:47+01:00
|
||||||
|
image:
|
||||||
|
math:
|
||||||
|
license:
|
||||||
|
hidden: false
|
||||||
|
draft: false
|
||||||
|
image: img/uv.png
|
||||||
|
categories:
|
||||||
|
- Programming
|
||||||
|
tags:
|
||||||
|
- python
|
||||||
|
---
|
||||||
|
|
||||||
|
Long story short: I'm now using [uv](https://github.com/astral-sh/uv), and so should you.
|
||||||
|
It is a great replacement for pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv, and more.
|
||||||
|
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
For years, my strategy to manage python projects has been a mix of a custom `setup.py`, several hand-crafted `requirements.txt` files (through `pip freeze`), a custom virtualenv per project, and multiple tools to upload to PyPI.
|
||||||
|
Although this works, this setup has many drawbacks:
|
||||||
|
|
||||||
|
- It requires user intervention (creating a venv, sourcing it, handling new deps). This isn't ideal if you want new (probably inexperienced) users to use your projects.
|
||||||
|
- On a similar note, the whole process needs to be well documented if you want other users to contribute or maintain the code.
|
||||||
|
- Pinning dependency versions is finicky, and I've run into problems beause of that.
|
||||||
|
- Creating a new project involves a template, or copying files from an older project.
|
||||||
|
|
||||||
|
Of course, this is nothing new.
|
||||||
|
There is a whole site dedicated to [packaging your Python project](https://packaging.python.org/en/latest/).
|
||||||
|
A plethora of different projects have come and go, with varying degrees of success.
|
||||||
|
|
||||||
|
## Alternatives (poetry)
|
||||||
|
|
||||||
|
About a year before trying `uv`, I tried to catch up with the ecosystem and get to know the `blessed new way`.
|
||||||
|
However, the task proved to be a little more difficult, as the landscape is filled with a myriad of alternatives, each with their own set of drawbacks and detractors.
|
||||||
|
Packaging has historically been a weak spot, in ironical contradiction to the Zen of Python's "There should be one-- and preferably only one --obvious way to do it",
|
||||||
|
|
||||||
|
I eventually settled on [poetry](https://python-poetry.org/).
|
||||||
|
Mostly because it seemed like the most popular alternative.
|
||||||
|
|
||||||
|
There are many things I liked about it.
|
||||||
|
First of all, having a convention for dependencies (`pyproject.toml`) and a tool that properly handles them was nice.
|
||||||
|
It also removed the need to remember specific incantations to build and publish my Python projects.
|
||||||
|
Lastly, I mixed it `poetry2nix` to create reproducible python environments using nix.
|
||||||
|
This makes for a very powerful experience.
|
||||||
|
|
||||||
|
However, there were multiple hiccups.
|
||||||
|
First of all, it took me some time to figure out which specific fields to use (each tool can define ad-hoc properties in a the `pyproject.toml` file), and some of them seemed redundant with the more generic ones.
|
||||||
|
Full disclosure, this specific point might be a mistake on my side, and I do not remember the details.
|
||||||
|
The second one is speed.
|
||||||
|
(Re-)creating an environment took a non-negligible amount of time.
|
||||||
|
|
||||||
|
## Enter ~light~ `uv`
|
||||||
|
|
||||||
|
According to its repository, `uv `can replace pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv, and more.
|
||||||
|
Not only that, but it also claims to do that 10-100 times faster than pip.
|
||||||
|
I must admit that it being written in rust was a another selling point for me, as I'm looking for excuses to collaborate in a decently-sized rust projejct.
|
||||||
|
|
||||||
|
Installing it is dead simple: simply download the binary (e.g., with curl) or run `pip install uv`.
|
||||||
|
You won't need much more: `uv` seems to just do the right thing out of the box.
|
||||||
|
And it does it really, really fast.
|
||||||
|
The rest of the time it gets out of the way.
|
||||||
|
|
||||||
|
My only gripe so far is that I don't seem to find a built-in command to drop into a shell, but that is nothing that `uv run $SHELL` cannot fix.
|
||||||
|
|
||||||
|
|
||||||
|
## Common operations
|
||||||
|
### Initialize a repository
|
||||||
|
|
||||||
|
```
|
||||||
|
uv init
|
||||||
|
```
|
||||||
|
### Adding dependencies
|
||||||
|
|
||||||
|
```
|
||||||
|
uv add senpy
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running commands inside the environment
|
||||||
|
|
||||||
|
```
|
||||||
|
uv run <COMMAND>
|
||||||
|
|
||||||
|
# e.g., run a shell using your python version and dependencies
|
||||||
|
uv run $SHELL
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Dependency tree
|
||||||
|
|
||||||
|
```
|
||||||
|
uv shell
|
||||||
|
Resolved 44 packages in 1ms
|
||||||
|
my-project v0.1.0
|
||||||
|
├── fastapi[standard] v0.115.8
|
||||||
|
│ ├── pydantic v2.10.6
|
||||||
|
│ │ ├── annotated-types v0.7.0
|
||||||
|
│ │ ├── pydantic-core v2.27.2
|
||||||
|
│ │ │ └── typing-extensions v4.12.2
|
||||||
|
│ │ └── typing-extensions v4.12.2
|
||||||
|
│ ├── starlette v0.45.3
|
||||||
|
│ │ └── anyio v4.8.0
|
||||||
|
│ │ ├── exceptiongroup v1.2.2
|
||||||
|
│ │ ├── idna v3.10
|
||||||
|
│ │ ├── sniffio v1.3.1
|
||||||
|
│ │ └── typing-extensions v4.12.2
|
||||||
|
│ ├── typing-extensions v4.12.2
|
||||||
|
│ ├── email-validator v2.2.0 (extra: standard)
|
||||||
|
│ │ ├── dnspython v2.7.0
|
||||||
|
...
|
||||||
|
```
|
BIN
static/img/emacs.png
Normal file
BIN
static/img/emacs.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
static/img/linux.png
Normal file
BIN
static/img/linux.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
BIN
static/img/python.png
Normal file
BIN
static/img/python.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
BIN
static/img/rpi.png
Normal file
BIN
static/img/rpi.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.1 KiB |
BIN
static/img/uv.png
Normal file
BIN
static/img/uv.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 59 KiB |
Loading…
Reference in New Issue
Block a user