Version control for Python with uv

Tool
Python
Author

Tony D

Published

March 14, 2025

install

Code
!pip install uv

create project

Code
!uv init project

show python version

Code
!uv python list --only-installed
cpython-3.13.2-macos-aarch64-none    /usr/local/bin/python3.13 -> ../../../Library/Frameworks/Python.framework/Versions/3.13/bin/python3.13
cpython-3.13.2-macos-aarch64-none    /opt/homebrew/opt/python@3.13/bin/python3.13 -> ../Frameworks/Python.framework/Versions/3.13/bin/python3.13
cpython-3.13.2-macos-aarch64-none    /Library/Frameworks/Python.framework/Versions/3.13/bin/python3.13
cpython-3.13.2-macos-aarch64-none    /Library/Frameworks/Python.framework/Versions/3.13/bin/python3 -> python3.13
cpython-3.12.7-macos-aarch64-none    /opt/homebrew/opt/python@3.12/bin/python3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/python3.12
cpython-3.11.9-macos-aarch64-none    /usr/local/bin/python3.11 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11
cpython-3.11.9-macos-aarch64-none    /usr/local/bin/python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3
cpython-3.11.9-macos-aarch64-none    /Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11
cpython-3.11.9-macos-aarch64-none    /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 -> python3.11
cpython-3.11.9-macos-aarch64-none    /Users/jinchaoduan/.local/share/uv/python/cpython-3.11.9-macos-aarch64-none/bin/python3.11
cpython-3.9.6-macos-aarch64-none     /Library/Developer/CommandLineTools/usr/bin/python3 -> ../../Library/Frameworks/Python3.framework/Versions/3.9/bin/python3

chose python version

Code
!uv python pin 3.13

install pacakge

Code
!uv add siuba

show pacakge

Code
!uv tree

delete pacakge

Code
!uv remove rich

using uv with script header

there is no rich package in python

Code
try:
    import rich
    print('pacakge installed')
except ImportError as e:
    print('pacakge not installed')
    pass  # module doesn't exist, deal with it.

but can add rich package in script

#| eval: false

# /// script
# requires-python = ">=3.12"
# dependencies = [
#   "requests<3",
#   "rich",
# ]
# ///

import requests
import rich
from rich.pretty import pprint


import rich
from importlib.metadata import version

print('test.py is running')
print('version is :')
print(version('rich'))

run .py with uv

Code
!uv run test.py
test.py is running
version is :
13.9.4

reference:

https://github.com/astral-sh/uv