![Real Python Podcast E238 Title Image](https://files.realpython.com/media/E_238_Podcast_Title.a9c99a8b0365.jpg)
Episode 238: Charlie Marsh: Accelerating Python Tooling With Ruff and uv
The Real Python Podcast
Feb 07, 2025 1h 30m
Are you looking for fast tools to lint your code and manage your projects? How is the Rust programming language being used to speed up Python tools? This week on the show, we speak with Charlie Marsh about his company, Astral, and their tools, uv and Ruff.
Episode Sponsor:
Charlie started working on Ruff as a proof of concept, stating that Python tooling could be much faster. He had seen similar gains in JavaScript tools written in Rust. The project started as a speedy linter with a small ruleset. It’s grown to include code formatting and over 800 built-in linting rules.
Last year, the team at Astral started working on a Python package and project manager written in Rust. As a single tool, uv can replace pip, pip-tools, pipx, poetry, pyenv, and more. We discuss how uv can install and manage versions of Python and run scripts without thinking about virtual environments or dependencies.
Charlie talks about growing the team at Astral over the past couple of years. We also discuss the funding model Astral has adopted and sustaining open-source software.
This episode is sponsored by Postman.
Course Spotlight: Python Basics: Installing Packages With pip
Python’s standard library includes a whole buffet of useful packages, but sometimes you need to reach for a third-party library. That’s where pip comes in handy. In this video course, you’ll learn how to pip install packages.
Topics:
- 00:00:00 – Introduction
- 00:03:37 – How did you get involved in open source?
- 00:07:01 – Fostering a community around a project
- 00:11:32 – Python tooling could be much, much faster
- 00:15:45 – Changing the ergonomics of tooling
- 00:19:59 – What is ruff and what jobs can it do?
- 00:22:23 – How do you configure ruff?
- 00:26:02 – Where do the linting rules come from?
- 00:29:29 – Can you build your own rules?
- 00:31:28 – Performance difference for ruff
- 00:36:25 – Installing ruff
- 00:37:34 – The rustification of Python
- 00:40:52 – The initial features and release of uv
- 00:45:07 – Installing Python
- 00:47:50 – Taking over the python-build-standalone project
- 00:53:02 – Installation methods and suggestions
- 00:55:37 – Video Course Spotlight
- 00:57:07 – The project API
- 01:01:57 – Inline script metadata and PEP 723
- 01:06:49 – Installing tools with uvx
- 01:09:37 – Project management
- 01:11:20 – Astral as company and VC funding
- 01:19:23 – New static type checker
- 01:26:15 – What are you excited about in the world of Python?
- 01:27:12 – What do you want to learn next?
- 01:28:52 – How can people follow your work online?
- 01:29:34 – Thanks and goodbye
Show Links:
- Astral: Next-gen Python tooling
- Python tooling could be much, much faster
- Ruff, an extremely fast Python linter - Astral
- PEP 8 – Style Guide for Python Code
- FastHTML - Modern web applications in pure Python
- uv: An extremely fast Python package and project manager, written in Rust.
- Using Python’s pip to Manage Your Projects’ Dependencies – Tutorial
- Install and Execute Python Applications Using pipx – Tutorial
- Python Standalone Builds — python-build-standalone documentation
- Running scripts - uv
- Inline script metadata - Python Packaging User Guide
- marimo - a next-generation Python notebook
- Episode #230: marimo: Reactive Notebooks and Deployable Web Apps in Python
- “We’re building a new static type checker for Python, from scratch, in Rust.”
- Charlie Marsh (@charliermarsh) - X
- Charlie Marsh (@crmarsh.com) — Bluesky