uv - Python

Un script de Python es pot executar en molts entorns diferents.

Introducció

uv s’encarrega de gestionar tot el que té a veure amb la gestió de Python.

Instal·la uv:

Utilitza irm per descarregar l’script i executa’l amb iex:

Terminal window
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

👉 Tanca i torna a obrir el terminal!

Note

Si no coneixes Python, primer fes la primera activitat de Python: Computació 😺

uv run

Per executar codi Python necessites tenir instal·lada una versió de Python.

Què és una versió? 🤔

Una versió de Python està composta per un intèrpret de Python (que té la funció d’interpretar el codi que ha escrit i executar-lo a l’ordinador), la biblioteca estàndard i altres fitxers de suport.

En aquest enllaç tens totes les versions de Python que pots utilitzar amb uv: Status of Python versions.

Pots executar directament un intèrpret de Python amb uv run.

Per exemple pots iniciar una sessió interactiva:

Terminal window
uv run python

Com que no has especificat una versió concreta de Python uv utilitza la versió més recent …

I si no està instal·lada, la baixa de manera automàtica 😺!!

També pots executar un script Python amb uv:

Terminal window
notepad hello.py
uv run hello.py

Si has d’executar un script de Python amb una versió concreta, la pots especificar amb -p (o --python):

Terminal window
uv run -p 3.9 python --version
Terminal window
Python 3.9.23

uv python

Amb uv python pots gestionar les diferents versions de Python que uv ha instal·lat en el teu sistema.

uv python list

En qualsevol moment pots veure totes les versions disponibles de Python:

Terminal window
uv python list

Pots veure que per defecte uv utilitza les distribucions de CPython (en parlem més endavant).

Terminal window
cpython-3.14.0b4-windows-x86_64-none <download available>
cpython-3.14.0b4+freethreaded-windows-x86_64-none <download available>
cpython-3.13.5-windows-x86_64-none C:\Users\david\AppData\Roaming\uv\python\cpython-3.13.5-windows-x86_64-none\python.exe
cpython-3.13.5-windows-x86_64-none <download available>
cpython-3.13.5+freethreaded-windows-x86_64-none <download available>
cpython-3.12.11-windows-x86_64-none <download available>
cpython-3.11.13-windows-x86_64-none <download available>
cpython-3.10.18-windows-x86_64-none <download available>
cpython-3.9.23-windows-x86_64-none C:\Users\david\AppData\Roaming\uv\python\cpython-3.9.23-windows-x86_64-none\python.exe
cpython-3.9.23-windows-x86_64-none <download available>
cpython-3.8.20-windows-x86_64-none <download available>
pypy-3.11.13-windows-x86_64-none <download available>
pypy-3.10.16-windows-x86_64-none <download available>
pypy-3.9.19-windows-x86_64-none <download available>
pypy-3.8.16-windows-x86_64-none <download available>
graalpy-3.11.0-windows-x86_64-none <download available>
graalpy-3.10.0-windows-x86_64-none <download available>

Si només vols veure les versions que tens instal·lades, pots utilitzar l’ordre el flag --only-installed:

Terminal window
uv python list --only-installed
cpython-3.13.5-windows-x86_64-none C:\Users\david\AppData\Roaming\uv\python\cpython-3.13.5-windows-x86_64-none\python.exe
cpython-3.9.23-windows-x86_64-none C:\Users\david\AppData\Roaming\uv\python\cpython-3.9.23-windows-x86_64-none\python.exe

uv python upgrade

Python té diverses versions disponibles, i cada versió es va actualitzant amb un “patch release”.

Per això, cpython-3.9.23 és el “patch release” 23 de la versió 3.9.

Per actualitzar una versió, utilitza l’ordre uv python upgrade:

Terminal window
uv python upgrade 3.9 --preview

Com que l’acabes d’instal·lar està actualitzada, però passat un temps 👻 …

També les pots actualitzar totes a la vegada:

Terminal window
uv python upgrade --preview
All versions already on latest supported patch release

uv python uninstall

En qualsevol moment pot desinstal·lar una versió de Python per recuperar espai en el teu sistema:

Terminal window
uv python uninstall 3.9
Terminal window
Searching for Python versions matching: Python 3.9
Uninstalled Python 3.9.23 in 543ms
- cpython-3.9.23-windows-x86_64-none (python3.9.exe)

Distribucions

uv utilitza distribucions de Python completament portables que es poden instal·lar de manera local, i com has vist abans, et permet tenir diferents versions de Python en el teu sistema.

Per defecte, uv utilitza la distribució CPython, però existeixen altres distribucions de Python que pots utilitzar com són PyPy i Pyodide.

CPython

Com que Python no publica binaris oficials distribuïbles de CPython, uv utilitza, en canvi, distribucions pre-compilades del projecte python-build-standalone d’Astral. p

Aquestes distribucions tenen algunes particularitats de comportament, generalment com a conseqüència de la portabilitat; consulta la documentació de particularitats de python-build-standalone per a més detalls.

A més, algunes plataformes poden no estar suportades (per exemple, les distribucions encara no estan disponibles per a Linux musl en ARM).

PyPy

Les distribucions PyPy són proporcionades pel projecte PyPy.

De mitjana, PyPy és aproximadament 3 vegades més ràpid que CPython, però no tens disponible la versió més recent.

Terminal window
uv run -p pypy python --version
Terminal window
Python 3.11.13 (413c9b7f57f5, Jul 03 2025, 18:04:37)
[PyPy 7.3.20 with MSC v.1941 64 bit (AMD64)]

Com que a tothom li agrada escriure com menys millor, pots utilitzar l’abreviatura de pypy que és pp:

Terminal window
uv run -p pp python --version
Terminal window
Python 3.11.13 (413c9b7f57f5, Jul 03 2025, 18:04:37)
[PyPy 7.3.20 with MSC v.1941 64 bit (AMD64)]

Pyodide

Les distribucions Pyodide són proporcionades pel projecte Pyodide.

Pyodide és una adaptació de CPython per a la plataforma WebAssembly / Emscripten que permet executar Python en el navegador amb micropip

De moment només està disponible la gestió automàtica en Linux

GraalPy

GraalPy és un runtime de Python d’alt rendiment embegut per a Java:

  • Carrega i utilitza paquets de Python directament a Java
  • Compatible amb molts paquets de Python, incloent-hi llibreries populars d’IA i Data Science
  • El compilador JIT Graal compila Python per aconseguir velocitat de codi natiu

gp és una abreviatura de graalpy:

Terminal window
uv run -p gp python --version
GraalPy 3.11.7 (Oracle GraalVM Native 24.2.1)

Actvitats

Task

Executa un interpret interactiu de python amb la versió 3.10 de la distribució PyPy:

Script

A Python script is a file intended for standalone execution, e.g., with python hello.py.

Utilitzar uv per executar scripts assegura que les dependències dels scripts es gestionen sense haver de gestionar manualment els entorns.

Executar un script sense dependències

Crea un fitxer hello.py

print("Hello world")

Com que aquest script no té dependències externes, pots executar-lo amb uv run:

Terminal window
uv run hello.py

De manera similar, si el teu script depèn d’un mòdul de la biblioteca estàndard, no cal fer res més:

example.py
import datetime as dt
print(dt.datetime.now())
Terminal window
uv run hello.py

Executar un script amb dependències

Quan el teu script requereix altres paquets, aquests s’han d’instal·lar en l’entorn en què s’executa l’script.

uv prefereix crear aquests entorns sota demanda en lloc d’utilitzar un entorn virtual de llarga durada amb dependències gestionades manualment.

Això requereix la declaració explícita de les dependències que són necessàries per a l’script.

En general, es recomana utilitzar un uv - Projecte o metadades en línia per declarar les dependències, però uv també permet sol·licitar dependències per invocació.

A continuació crea l’script jokes.py.

import pyjokes
print(pyjokes.get_joke())

PyJokes són acudits d’una línia per a programadors (acudits com a servei)

Aquest script necessita la biblioteca pyjokes, per tant,

Terminal window
uv run jokes.py
Terminal window
Traceback (most recent call last):
File "C:\Users\david\Workspace\tmp\jokes.py", line 1, in <module>
import pyjokes
ModuleNotFoundError: No module named 'pyjokes'

Digues a uv que utilitzi la dependència amb l’opció --with:

Terminal window
uv run --with pyjokes jokes.py
Terminal window
Installed 1 package in 60ms
How many programmers does it take to change a lightbulb? None, that's a hardware problem

També ss poden sol·licitar múltiples dependències repetint l’opció --with.

Task

😹

Pyjokes permet molts idiomes, i té múltiples categories d’acudits tal com s’explica a Pyjokes.

Prova algunes, per exemple millor en espanyol!

Ja sabem que potser no li trobes la gràcia a aquests acudits encara, però quan siguis un programador riuras (o ploraràs molt).

Crear un script de Python

Python ha afegit recentment un format estàndard per a metadades en línia d’scripts.

Permet seleccionar versions de Python i definir dependències.

Utilitza uv init --script per inicialitzar scripts amb les metadades en línia:

Terminal window
uv init --script color.py --python 3.14

Declarar dependències d’script

El format de metadades en línia permet declarar les dependències d’un script dins del mateix script.

uv permet afegir i actualitzar metadades en línia d’script per tu.

Utilitza uv add --script per declarar les dependències de l’script:

Terminal window
uv add --script jokes.py 'pyjokes'

Això afegirà una secció d’script a la part superior de l’script declarant les dependències utilitzant TOML:

# /// script
# requires-python = ">=3.13"
# dependencies = [
# "pyjokes",
# ]
# ///
import pyjokes
print(pyjokes.get_joke("es"))

uv crearà automàticament un entorn amb les dependències necessàries per executar l’script

Terminal window
uv run jokes.py
Camarero: ¿Le gustaría tomar un té o un café? Programador: Sí

PENDENT

uv -scripts

uv tool

uv includes a dedicated interface for interacting with tools. Tools can be invoked without installation using uv tool run, in which case their dependencies are installed in a temporary virtual environment isolated from the current project.

Because it is very common to run tools without installing them, a uvx alias is provided for uv tool run — the two commands are exactly equivalent. For brevity, the documentation will mostly refer to uvx instead of uv tool run.

Tools can also be installed with uv tool install, in which case their executables are available on the PATH — an isolated virtual environment is still used, but it is not removed when the command completes.

PENDENT

Tools