Markdown supported: # Heading, **bold**, *italic*, `code`, - list items, etc.
Tip: Paste images directly from clipboard or drag-and-drop to upload!
1. What is UV?
- Purpose: UV is a unified Python package manager designed to replace
pip (package installation), venv (virtual environments), pip-tools (lock files), and pipx (command-line tools).
- Performance: Written in Rust, UV is faster than traditional tools.
- Maintainer: Developed by Astral, known for the Ruff linter.
- Goal: Simplify Python project management with a single tool.
2. Installation
- Methods: UV can be installed via Homebrew (easiest for Mac users), a standalone installer (
curl for Mac/Linux, PowerShell for Windows), or other package managers.
- Example: On a Mac with Homebrew, run
brew install uv. Verify installation with uv to list available commands.
- Resources: Installation options are detailed on UV’s official page (linked in the video description).
3. Traditional Workflow (pip and venv)
- Steps:
- Create a project directory (
mkdir old_way).
- Create a virtual environment (
python3 -m venv venv).
- Activate it (
source venv/bin/activate).
- Install packages (
pip install flask requests).
- Create a project file (
touch main.py).
- Generate a
requirements.txt (pip freeze > requirements.txt).
- Drawbacks: Multiple steps, manual virtual environment management, and lack of intuitive dependency locking make it complex, especially for beginners.
4. UV Workflow
- Project Initialization:
- Create a new project with
uv init new_app, which sets up a directory with a Git repository, .gitignore, .python-version, README.md, main.py, and pyproject.toml.
- Alternative: Run
uv init in an existing directory.
- Init a project with a particular python version:
uv init . --python 3.10
- Project types:
app (default, for scripts/web servers) or lib (for distributable packages).
- Dependency Management:
- Add packages with
uv add flask requests, which updates pyproject.toml and creates a uv.lock file for reproducible environments.
- UV automatically creates and manages a virtual environment (
.venv) when needed.
- Visualize dependencies with
uv tree.
- Running Code:
- Run scripts with
uv run main.py, which uses the project’s virtual environment without manual activation.
- If the virtual environment is deleted,
uv run recreates it using pyproject.toml and uv.lock.
- Environment Syncing:
- Use
uv sync to recreate an environment from pyproject.toml and uv.lock.
- Remove dependencies with
uv remove flask, which updates project files.
5. Advantages of UV
- Speed: UV’s Rust implementation and global caching system make installations faster than
pip.
- Disk Efficiency: Global caching stores packages once for multiple projects, saving space.
- Reproducibility: The
uv.lock file ensures consistent environments across machines.
- Simplicity: Fewer commands and automatic virtual environment handling streamline workflows.
- Backward Compatibility: The
uv pip subcommand mimics pip for gradual transitions (e.g., uv pip install numpy).
6. Migrating Existing Projects
- Steps:
- Run
uv init in the project directory.
- Import dependencies from
requirements.txt with uv add -r requirements.txt.
- Delete
requirements.txt to rely on pyproject.toml and uv.lock.
- Benefit: Converts
pip-based projects to UV’s modern workflow.
7. UV as a pipx Replacement
- Tool Installation: Install global Python tools (e.g., Ruff) with
uv tool install ruff, making them available system-wide.
- Temporary Tool Usage: Run tools without permanent installation using
uv tool run ruff check or the shortcut uvx ruff check.
- Tool Management: List tools (
uv tool list), uninstall (uv tool uninstall ruff), or upgrade (uv tool upgrade --all).
- Example: Install Ruff to lint code (
ruff check) or run it temporarily (uvx ruff check).
8. Additional Features
- Python Version Management: UV supports multiple Python versions via
.python-version.
- Package Publishing: Commands for building and uploading packages to PyPI.
- Docker Optimization: Features for building efficient Docker containers (not covered in detail).
- Future Tutorials: The presenter plans a follow-up on Ruff and advanced UV features.
9. Why Switch to UV?
- For Beginners: Simplifies complex tasks like virtual environment setup.
- For Experts: Offers speed, reproducibility, and advanced features.
- Community Adoption: UV and Ruff are gaining popularity, with the presenter adopting UV for future videos.
- Transition Ease: The
uv pip subcommand supports gradual adoption.
Takeaways
- Efficiency: UV consolidates multiple tools into a faster, user-friendly interface.
- Modern Workflow:
pyproject.toml and uv.lock replace requirements.txt for better dependency management.
- Flexibility: Supports both new projects and migrations, plus global tool management.
- Community Impact: Backed by Astral, UV is becoming a standard in Python development.