Skip to content
Artwork for The Real Python Podcast

The Real Python Podcast

Real Python

A weekly Python podcast hosted by Christopher Bailey with interviews, coding tips, and conversation with guests from the Python community.

The show covers a wide range of topics including Python programming best practices, career tips, and related software development topics. Join us every Friday morning to hear what's new in the world of Python programming and become a more effective Pythonista.

Play
  • 23 episodes
  • weekly
  • Avg 57 min
  • English
Counted on this page — what you have heard stays on this device, so it is not something the list can be paged by.
  • #309
    Friday · 41 min

    Exploring Complex Systems & Maintainable Data Science Pipelines

    What are the key characteristics of complex systems, and what are practical patterns for tackling complex coding problems? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. Christopher covers an article about working on complex systems. The piece explores the distinction between complicated and complex problems. Each requires a fundamentally different approach to solve. We dig into a couple of tutorials about creating repeatable data science pipelines. One covers validating DataFrames and tables with the pointblank library to build into a continuous integration workflow. The other explores how to use configuration files to build modular pipelines that avoid the pitfalls of hardcoded paths and parameters. We also share other articles and projects from the Python community, including recent releases, three Python Enhancement Proposals (PEPs), the difficulties with breaking up lines of text, a static site generator for marimo notebooks, and a static analyzer for malicious Python code. Course Spotlight: Sending Emails Using Python Learn how to send emails with Python using SMTP and smtplib, attach files, format HTML messages, and personalize bulk emails. Topics: 00:00:00 – Introduction 00:02:24 – Python 3.12.14, 3.11.16 and 3.10.21 Released 00:03:02 – Django Is Moving to an Annual Release Cycle 00:04:17 – PEP 828: Supporting ‘Yield From’ in Asynchronous Generators 00:04:56 – PEP 841: Adding Frozen Syntax to Optimize Immutable Types 00:07:04 – PEP 844: public and private Builtins 00:10:09 – Validating Data With Pointblank in Python 00:18:22 – Working on Complex Systems: Patterns I Learned at Google 00:22:14 – Video Course Spotlight 00:23:58 – Hydra for Python Configuration: Build Modular and Maintainable Pipelines 00:29:29 – Breaking Up (Lines) Is Hard to Do 00:35:00 – marimo-book: Static Site Generator for marimo Notebooks 00:38:06 – marimo-lsp: A language server and VS Code extension for marimo 00:38:31 – hexora: Static analysis of malicious Python code 00:40:01 – Thanks and goodbye News: Python 3.12.14, 3.11.16 and 3.10.21 Released Django Is Moving to an Annual Release Cycle PEP 828: Supporting ‘Yield From’ in Asynchronous Generators (Accepted) PEP 841: Adding Frozen Syntax to Optimize Immutable Types (Draft) PEP 844: public and private Builtins (Draft) Show Links: Validating Data With Pointblank in Python – Learn how to validate data in Python with Pointblank: declare quality checks, split clean from failing rows, and rerun validation plans from YAML. Working on Complex Systems: Patterns I Learned at Google – Explore the key characteristics of complex systems and learn practical patterns for tackling complex problems The Coder Cafe - Teiva Harsanyi – The Coder Cafe introduces vital software engineering concepts that will upgrade your day-to-day practice, regardless of your skill level. Discount Code (CODERCAFE40) Expires November 21st 2026. Hydra for Python Configuration: Build Modular and Maintainable Pipelines – Hardcoded paths and parameters can quickly drift out of sync across a data science project’s scripts. This article shows how to move them into Hydra configuration files, access values with dot notation, override settings from the command line, swap entire configuration groups, and run experiment sweeps with a single multi-run flag. Breaking Up (Lines) Is Hard to Do – Here’s a seemingly simple question: given a chunk of multi-line text, how do you split it and return an array? Unicode makes everything harder than it might first seem. Projects: marimo-book: Static Site Generator for marimo Notebooks marimo-lsp: A language server and VS Code extension for marimo hexora: Static analysis of malicious Python code Additional Links: pointblank - PyPI Episode #274: Preparing Data Science Projects for Production With Khuyen Tran marimo-book DartBrains - How can we understand how the brain works? marimo - Visual Studio Marketplace Level up your Python skills with our expert-led courses: Getting Started With marimo Notebooks Managing Imports With Python's all Sending Emails Using Python Support the podcast & join our community of Pythonistas

  • #308
    August 21 · 1 hr 9 min

    Navigating Silent Failures in AI: Strategies for Effective Oversight

    Why do AI systems silently fail? How can you set up a system that produces results while also reviewing and validating the work? This week on the show, Calvin Hendryx-Parker returns to discuss his recent talk “Orchestrate Agentic AI: Context, Checklists, and No-Miss Reviews.” Calvin describes how silent failures can occur when handing a large document to an LLM for parsing. He describes it as the tragedy of context, where the LLM is confident, but you have no idea what it didn’t read. We discuss issues with file formats, dropped attachments, and silent truncation. Calvin shares the example project from his talk, which includes Markdown files for the agents, hooks, skills, and scripts. He also discusses a variety of coding agents, skill frameworks, and CLI tools. Course Spotlight: Coding With OpenCode: AI-Assisted Python Learn how to use OpenCode for AI-assisted Python coding, using a free Gemini API key to analyze and refactor code right in your terminal. Topics: 00:00:00 – Introduction 00:02:19 – Co-hosting Python Bytes 00:03:43 – Why AI Fails Silently talk 00:11:07 – Digging into silent failures and an audit trail 00:18:44 – How would you define hooks? 00:20:48 – Document extraction, embeddings, and Cowork 00:30:38 – Stripping the noise from file formats 00:34:43 – Things that are now baked into models 00:45:53 – Video Course Spotlight 00:47:23 – Leveraging agents to pick models 00:51:44 – GitHub repo for the project 00:54:57 – The current market around tokens 01:00:12 – What are you excited about in the world of Python? 01:03:02 – What do you want to learn next? 01:04:21 – The content the LLMs are trained on 01:07:36 – Upcoming events 01:08:38 – Thanks and goodbye Show Links: Why AI Fails Silently and How to Fix It Claude Cowork - Claude by Anthropic List of All Oblique Strategies - Matt Rickard Pi Coding Agent goose - Your open source AI agent Codex CLI - ChatGPT Learn 2026 All Things Open AI: Orchestrate Agentic AI: Context, Checklists, and No-Miss Reviews - GitHub scaf: A template manager that simplifies bootstrapping and updating projects. Tau - Learn how coding agents are built. superpowers: An agentic skills framework & software development methodology that works. Hermes Agent — Open-Source AI Agent That Grows With You PyOhio 2026 - PyOhio 2026 AWS re:Invent 2026 - Nov 30-Dec 4, Las Vegas Python Bytes - Python News Podcast beats the hell out of me - painfully - YouTube Level up your Python skills with our expert-led courses: Getting Started With Claude Code Use Codex CLI to Enhance Your Python Projects Coding With OpenCode: AI-Assisted Python Support the podcast & join our community of Pythonistas

  • #307
    August 14 · 46 min

    Improving NumPy Performance on Free-Threaded Python

    What bottlenecks were preventing NumPy from scaling on free-threaded Python? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. Christopher shares a recent article on the work done in NumPy to make multi-threaded workloads scale on the free-threaded build of CPython. It covers how removing the Global Interpreter Lock (GIL) is not enough on its own and how profiling revealed hidden bottlenecks in NumPy and CPython. We also share other articles and projects from the Python community, including recent releases, a pair of announcements from PyPI, a tool for crawling your Django project, SIMD in pure Python, managing wildcard imports, a publication-quality Python Data Visualization library, and a tool to review your Django schema. Spotlight: Modern Object-Oriented Python Book Master classes, Python’s data model, and object-oriented design with Modern Object-Oriented Python. The best of Real Python’s OOP tutorials, curated into one book and fully up to date for modern Python. Topics: 00:00:00 – Introduction 00:02:26 – Python 3.15.0 candidate 1 is here! 00:02:47 – Python 3.14.7 and 3.13.15 are now available! 00:03:00 – Django 6.1 released 00:03:39 – Planned Updates to the PyPI User Interface 00:04:13 – PyPI Releases Now Reject New Files After 14 Days 00:05:07 – PEP 837 – Extensible JSON serialization 00:06:20 – PEP 842: Module Exports 00:07:51 – Introducing django-crawl 00:12:02 – SIMD in Pure Python 00:18:29 – Managing Imports With Python’s __all__ 00:29:34 – Spotlight: Modern Object-Oriented Python Book 00:30:53 – Scaling NumPy on Free-Threaded Python 00:37:53 – cnsplots: Python Data Visualization for Complex Datasets 00:42:19 – django-orm-lens: Django Schema Review 00:45:14 – Thanks and goodbye News: Python 3.15.0 candidate 1 is here! - Python Insider Python 3.14.7 and 3.13.15 are now available! - Python Insider Django 6.1 released - Weblog - Django Planned Updates to the PyPI User Interface – Over the next few months a new user interface will be rolled out for the Python packaging website, PyPI. The rollout will be done in phases to make sure it is rock solid and to get community feedback. This post talks about the history of PyPI’s UI and what is changing. PyPI Releases Now Reject New Files After 14 Days – “The Python Package Index (PyPI) now rejects new files being uploaded to releases that are older than 14 days. This restriction was put in place to prevent old and long-stable releases from being poisoned” PEP 837 – Extensible JSON serialization PEP 842: Module Exports Show Links: Introducing django-crawl – During a recent site migration, Adam used the Django test harness to crawl his site looking for missing security headers. In the process he uncovered seven other bugs for a project that had 100% code coverage. He has consolidated the crawling technique for testing into a library: django-crawl. SIMD in Pure Python – SIMD is Single Instruction, Multiple Data, an approach that does calculations with vectors of data sets. Python doesn’t support it natively, but libraries like NumPy allow you to code this way. Thoughts on “SIMD in Pure Python” - purplesyringa’s blog Managing Imports With Python’s __all__ – Learn how Python’s dunder all variable controls wildcard imports and shapes the public API your packages and modules expose. Scaling NumPy on Free-Threaded Python – A recap on the work done in NumPy and CPython to make multi-threaded NumPy workloads scale on the free-threaded build of CPython. Projects: cnsplots: Python Data Visualization for Complex Datasets django-orm-lens: Django Schema Review Additional Links: What’s up Python? __json__, __export__ and Astral stuff Episode #97: Improving Your Django and Python Developer Experience Python’s __all__: Packages, Modules, and Wildcard Imports – Tutorial Quiz: Managing Imports With Python’s __all__ Smoke - The Amazing Hamster, Storing Food - YouTube Modern Object-Oriented Python Book – Real Python Level up your Python skills with our expert-led courses: Python Modules and Packages: An Introduction NumPy Techniques and Practical Examples Managing Imports With Python's all Support the podcast & join our community of Pythonistas

  • #306
    August 7 · 1 hr 5 min

    Programmatically Developing LLM Prompts With DSPy

    How can you move from manually writing prompts for an LLM application toward defining them programmatically? This week on the show, Brett Kennedy returns to discuss his new book “Building LLM Applications with DSPy.” With large language models becoming embedded in production software, manual prompt engineering becomes brittle, time-consuming, and difficult to maintain. Brett shares how DSPy replaces manually writing and adjusting prompts with structured prompt programming. We dig into how DSPy uses declarative signatures to define inputs and outputs. We also discuss how developers programmatically compile, tune, and optimize prompts for specific LLM-based tasks within an application. Course Spotlight: Using LlamaIndex for RAG in Python Learn how to set up LlamaIndex, load your data, build and persist an index, and run queries to get grounded answers with RAG in Python. Topics: 00:00:00 – Introduction 00:01:50 – Working on a new book 00:02:53 – Writing with a partner 00:04:16 – Building LLM Applications with DSPy 00:05:22 – What is DSPy? 00:06:58 – Working with signatures and typing 00:09:53 – Prompt engineering failing to work for a new model 00:13:43 – What is an optimizer? 00:19:04 – Moving toward a new level of abstraction in prompting 00:23:19 – Prompts for the LLM within a consumer facing application 00:28:26 – Video Course Spotlight 00:30:21 – Example of using with RAG 00:38:45 – Example of a business plan tool 00:43:06 – The Bitter Lesson 00:46:03 – Structure of the book 00:49:55 – Advice on starting with DSPy 00:54:15 – Example of a transformed prompt 00:59:37 – What are you excited about in the world of Python? 01:01:47 – What do you want to learn next? 01:04:11 – What’s the best way to follow your work online? 01:04:40 – Thanks and goodbye Show Links: Building LLM Applications with DSPy - Serj Smorodinsky and Brett Kennedy DSPy DSPy: The framework for programming—not prompting—language models - GitHub Tutorials Overview - DSPy GEPA optimization - DSPy Let the LLM Write the Prompts: An Intro to DSPy in Compound AI Pipelines - YouTube Episode #208: Detecting Outliers in Your Data With Python Tabular Models Benchmark: Performance Across 19 Datasets 2026 Brett Kennedy on Manning Serj Smorodinsky on Manning W Brett Kennedy – Medium Brett Kennedy - LinkedIn Level up your Python skills with our expert-led courses: Building Type-Safe LLM Agents With Pydantic AI Accessing Multiple AI Models With the OpenRouter API Using LlamaIndex for RAG in Python Support the podcast & join our community of Pythonistas

  • #305
    July 31 · 57 min

    Should You Understand Your Entire Python Codebase?

    Should you understand the entirety of your codebase? How familiar are you with Python’s built-in functions? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. We discuss a recent article by Sean Goedecke titled “In Defense of Not Understanding Your Codebase.” We dig into the differences in the scale of software projects and the factors that can obscure understanding of an entire codebase. We cover how opinions and practices people often argue for are based on the development practices from decades ago. Christopher shares his recent video course that explores Python’s built-in functions. The course is divided into sections to help you find the right built-in for tasks involving math, data types, iterables, and I/O. We discuss which of these functions are frequently used in our code. We also share other articles and projects from the Python community, including recent releases, querying with f-expressions in Django, replacing if-else chains, a Rust-based replacement for Python’s json module, and a couple of Python cheat sheet resources. This episode is sponsored by HydraDB. Course Spotlight: Exploring Python’s Built-in Functions Learn Python’s built-in functions for math, data types, iterables, and I/O, and when to use each to write more Pythonic code. Topics: 00:00:00 – Introduction 00:02:29 – Christopher’s Python News Song 00:03:18 – Python 3.15.0 Beta 4 Released 00:03:39 – PEP 838: Adding python-version to pyvenv.cfg 00:04:59 – PEP 840: Name Resolution in Class Namespaces 00:06:42 – Stop Using if-else Chains 00:13:46 – Sponsor: HydraDB 00:14:44 – Nifty Django Feature: F Expressions 00:20:23 – In Defense of Not Understanding Your Codebase 00:34:13 – Exploring Python’s Built-in Functions 00:45:26 – Video Course Spotlight 00:46:57 – Python strftime/strptime Directive Cheat Sheet 00:50:22 – Itertools Cheatsheet 00:52:59 – Introducing django-orjson 00:55:33 – Thanks and goodbye News: Python 3.15.0 Beta 4 Released PEP 838: Adding python-version to pyvenv.cfg (Added) PEP 840: Name Resolution in Class Namespaces (Added) Show Links: Stop Using if-else Chains – Learn a cleaner, more extensible way to dispatch logic in Python using dictionaries and function pointers instead of long if-else chains. Nifty Django Feature: F Expressions – Django’s F-Expression provides a way of querying fields from the ORM. They’re particularly handy to traverse relationships in more complex queries. F() Expressions - Django Documentation In Defense of Not Understanding Your Codebase – In this opinion piece, Sean argues that there is a difference in the thought process between maintaining smaller software projects vs larger ones, and that the former is over represented in engineering discussion in the internet. Exploring Python’s Built-in Functions – Learn Python’s built-in functions for math, data types, iterables, and I/O, and when to use each to write more Pythonic code. Projects: Python strftime/strptime Directive Cheat Sheet Itertools Cheatsheet – Cheatsheet with visual diagrams that explain how the iterables from itertools work. Introducing django-orjson – orjson is a Rust-based replacement for Python’s json module. So what would Adam Johnson do with it? Make it easier to use in Django of course. orjson: Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy django-orjson documentation Additional Links: Primer on Python Decorators - Registering Plugins Python Built-in Functions: A Complete Guide Python Cheat Sheet – Real Python What’s in which Python - Ned Batchelder Level up your Python skills with our expert-led courses: Using Python's datetime Module Python Basics: Conditional Logic and Control Flow Exploring Python's Built-in Functions Support the podcast & join our community of Pythonistas

  • #304
    July 24 · 58 min

    Configuring a Versatile LLM Harness & Scraping the Web With Scrapy

    Which is more important, the model or the “harness” around an LLM? What are ways to assemble an efficient agentic developer workflow? This week on the show, Ayan Pahwa joins us to discuss harnessing, web scraping, and self-hosting Python applications. Ayan is a developer advocate at Zyte and an experienced project builder. We discuss a recent article he wrote about creating an extension for the web scraping tool Scrapy. He also digs into his self-hosting setup for Python applications and tools. Our discussion extends to the complexities of developing effective harnesses. Ayan shares his setup and how he navigated shifting from prompt engineering to context and loop engineering. This episode is sponsored by HydraDB. Course Spotlight: Introduction to Web Scraping With Python In this video course, you’ll learn all about web scraping in Python. You’ll see how to parse data from websites and interact with HTML forms using tools such as Beautiful Soup and MechanicalSoup. Topics: 00:00:00 – Introduction 00:02:01 – Scrapy and building an extension 00:08:46 – Zyte and the web scraping API 00:11:19 – Sponsor: HydraDB 00:12:22 – noalgotube project 00:15:49 – Homelab & self hosting projects 00:22:19 – What goes into a harness? 00:32:33 – Where did you start exploring LLM tools? 00:36:13 – Local models & edge computing 00:39:31 – ExtractPod and discussing Apple’s AI 00:43:35 – Video Course Spotlight 00:44:54 – Managing token use and tools 00:52:37 – What are you excited about in the world of Python? 00:55:10 – What do you want to learn next? 00:56:38 – What is the best way to follow your work online? 00:56:58 – Thanks and goodbye Show Links: How to build your first Scrapy extension Web Scraping API - All-in-one Web Scraper - Zyte API Web Scraping With Scrapy and MongoDB – Real Python noalgotube: I Built My Own YouTube Feed Because the Algorithm Stopped Working for Me - CodeNSolder noalgotube: A personal content aggregator for YouTube channels and blog RSS feeds Why homelab? Building a proper self-hosted setup from scratch - CodeNSolder OPNsense: Open source, feature rich firewall and routing platform, offering cutting-edge network protection Proxmox - Powerful open-source server solutions Pi-hole – Network-wide Ad Blocking omni-tools: Self-hosted collection of powerful web-based tools for everyday tasks Frigate NVR Harness Engineering, part 1: What is an agent harness and why it matters My agentic coding setup: Claude Code, multi-agent orchestration, and how I actually work ExtractPod EP07 - AI Harnesses, our model usage and a Scottish dinner staple. - YouTube OpenCode - The open source AI coding agent OpenRouter Gemma 4 — Google DeepMind LM Studio Bionic - Agent for Open Models GLM-5.2: Built for Long-Horizon Tasks caveman: 🪨 why use many token when few token do trick — Claude Code skill ponytail: Makes your AI agent think like the laziest senior dev in the room Episode #301: Running Python Locally in a Sandbox Aillio – Bullet R2 - Coffee Roaster CodeNSolder Ayan Pahwa - Zyte HydraDB Level up your Python skills with our expert-led courses: Introduction to Web Scraping With Python Getting Started With Claude Code Testing MCP Servers With a Python MCP Client Support the podcast & join our community of Pythonistas

  • #303
    July 17 · 50 min

    Free-Threaded Python's History & uv in Production

    How many attempts have been made to remove Python’s Global Interpreter Lock (GIL)? How do they compare to the current approach? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. Christopher shares a recent article about Thomas Wouters’ talk at PyCon US 2026. The talk, titled “Free-threaded Python: past, present, and future,” covers the efforts to remove the GIL starting in 1996. He explains that threads are complex, but they allow multiple tasks to run concurrently within a single process and its address space. The GIL is how CPython implements threading. The GIL protects Python objects and their reference counts, which determine the current objects in use. The talk also looks forward and shares the current work to remove the GIL, now named free-threaded Python, and the goals for the near future. We also share other articles and projects from the Python community, including community announcements, a roundup of recent Real Python tutorials and video courses, using uv in Production, employing Wagtail as Django admin on steroids, managing and measuring Python code quality, a pure-Python implementation of jq, and a project to bring interactivity to plotnine. This episode is sponsored by AURI by Endor Labs Course Spotlight: Thread Safety in Python: Locks and Other Techniques In this video course, you’ll learn about the issues that can occur when your code is run in a multithreaded environment. Then you’ll explore the various synchronization primitives available in Python’s threading module, such as locks, which help you make your code safe. Topics: 00:00:00 – Introduction 00:03:08 – PEP 836: JIT Go Brrr: The Path to a Supported JIT Compiler for CPython 00:04:34 – PyCon US 2026 Videos Are Up 00:04:53 – Thinking About Running for the PSF Board? Let’s Talk! 00:05:30 – How to Get Started With the GitHub Copilot CLI 00:06:27 – Python 3.15 Preview: Upgraded JIT Compiler 00:07:23 – Testing MCP Servers With a Python MCP Client 00:08:10 – How to Use GitHub 00:08:50 – Why I Wrote PEP 832: Virtual Environment Discovery 00:09:46 – Free-Threaded Python: Past, Present, and Future 00:16:51 – Sponsor: AURI by EndorLabs 00:17:38 – uv in Production: The Speed Is Real, the Integration Isn’t Free 00:26:18 – Wagtail as Django Admin on Steroids 00:29:52 – Video Course Spotlight 00:31:11 – Managing and Measuring Python Code Quality 00:43:10 – purejq: A Pure-Python Implementation of jq 00:46:41 – ninejs: Bringing ✨interactivity✨ to plotnine 00:49:15 – Thanks and goodbye News: PEP 836: JIT Go Brrr: The Path to a Supported JIT Compiler for CPython (Draft) The Path to a Supported JIT Compiler for CPython PyCon US 2026 Videos Are Up Thinking About Running for the PSF Board? Let’s Talk! – The Python Software Foundation Board has announced two office-hour sessions dedicated to giving information on running for the PSF Board. If you’re thinking of running in the upcoming election, these sessions can help you understand the ins and outs. Real Python News: How to Get Started With the GitHub Copilot CLI – Tutorial Managing and Measuring Python Code Quality – Video CoursePython 3.15 Preview: Upgraded JIT Compiler – Tutorial Testing MCP Servers With a Python MCP Client – Video Course How to Use GitHub – Real Python Show Links: Why I Wrote PEP 832: Virtual Environment Discovery – PEP 832 proposes a way to describe where your virtual environment is so that your tools can look in the right place. Although a relatively simple proposal it has caused some contention in the community. This post by Brett, the PEP’s author, describes his reasoning. Free-Threaded Python: Past, Present, and Future – This post summarizes a talk by core developer Thomas Wouters at PyCon US 2026 on Free-threaded Python: the attempt to remove the GIL. It describes why it is being done and what future work looks like. Free threaded Python past, present and future - YouTube uv in Production: The Speed Is Real, the Integration Isn’t Free – Oleg’s work moved their tooling from pip to uv and lived with it for ~90 days. They discovered that the speed is real, but that doesn’t mean there aren’t complications. Wagtail as Django Admin on Steroids – Wagtail can do pretty much everything the Django Admin can do, but includes a much more modern UI and more features. This article shows you how to use Wagtail as an Admin alternative. Managing and Measuring Python Code Quality – Master Python code quality tools like linters, formatters, type checkers, and profilers to measure, manage, and improve the code you write. Python Code Quality: Best Practices and Tools – Real Python Projects: purejq: A Pure-Python Implementation of jq ninejs: Bringing ✨interactivity✨ to plotnine ninejs - Documentation Additional Links: Episode #297: Improving Python Through PEPs and Protocols PEP 766 PEP 8 – Style Guide for Python Code | peps.python.org How to Write Beautiful Python Code With PEP 8 AURI for Developers - AI-Native AppSec Platform - Endor Labs Level up your Python skills with our expert-led courses: Threading in Python Thread Safety in Python: Locks and Other Techniques Testing MCP Servers With a Python MCP Client Support the podcast & join our community of Pythonistas

  • #302
    July 10 · 58 min

    Constructing and Judging Modern Agentic Workflows

    How can you improve your LLM agent systems through specification enrichment? What are the advantages of having an LLM act as a judge within an agent system? This week on the show, Senior IEEE Member and Quality Engineer Suneet Malhotra joins us to discuss building and evaluating agentic architecture. Suneet Malhotra is an independent practitioner-researcher with 18 years of experience in Quality Engineering (QE) and test automation for consumer-scale platforms. He discusses building specification-enrichment loops, monitoring performance, and using Cohen’s kappa to measure agreement between LLM judgments. Suneet is currently publishing multiple papers that are under peer review on these topics. He also provides links to his work and GitHub projects if you want to experiment with these concepts and methods yourself. Quick Survey: Get more out of the podcast show notes Video Course Spotlight: Testing MCP Servers With a Python MCP Client Learn how to build a Python MCP client that tests MCP servers from your terminal. List their tools, prompts, and resources, then call each one. Topics: 00:00:00 – Introduction 00:00:56 – Survey: RP Podcast show notes 00:02:11 – How did you get into testing? 00:05:04 – Has working for large public-facing corporations changed how you approach testing? 00:07:06 – Writing a paper on LLM-as-Judge 00:09:22 – Looking across the Software Development Lifecycle 00:14:46 – Agentic AI: theater vs methodology 00:17:23 – Specification enrichment 00:27:52 – Video Course Spotlight 00:29:18 – Saving the specifications 00:31:27 – Using the LLM as a judge & Cohen’s kappa 00:39:31 – How can people try out the project? 00:43:35 – What are some of the failure modes you’ve seen? 00:50:26 – What’s an inexpensive way to try these ideas out? 00:54:04 – What are you excited about in the world of Python? 00:56:14 – What do you want to learn next? 00:57:14 – How can people follow your work online? 00:57:32 – Thanks and goodbye Show Links: Suneet Malhotra - AI-Driven Quality Engineering Leader SuneetMalhotra - GitHub Suneet Malhotra - ORCID Cross-Layer Observability for LLM-Assisted Test Automation — Reference Implementation and Evaluation Data - Zenodo Specification Enrichment v28 (EISEJ submission) — Reference implementation and empirical evaluation - Zenodo Visual Oracle Bench — Two-Judge Synthetic-HTML Pilot for LLM-as-Judge Visual Regression Detection with Specificity Reporting - Zenodo Cohen’s kappa - Wikipedia Suneet Malhotra - LinkedIn Survey: Get more out of every Real Python Podcast episode Level up your Python skills with our expert-led courses: Improving Your Tests With the Python Mock Object Library Building Type-Safe LLM Agents With Pydantic AI Testing MCP Servers With a Python MCP Client Support the podcast & join our community of Pythonistas

  • #301
    July 3 · 45 min

    Running Python Locally in a Sandbox

    How do you avoid the risk of running a Python application locally that could be malicious, break your code, or leak private data? How can you create a sandboxed local environment using WASM and MicroPython? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. We cover a recent article by previous guest Simon Willison titled “Running Python code in a sandbox with MicroPython and WASM.” Simon has been experimenting for years on how to run Python code in a sandbox to reduce the risk of trying out new software, untrusted libraries, and wild ideas. He’s developed a solution using WASM and MicroPython and is sharing it as an alpha package on PyPI. We also share other articles and projects from the Python community, including new releases, community announcements, a roundup of recent Real Python tutorials and video courses, a plugin case study using Pluggy, a look at whether you’re expected to run five type-checkers now, wrapping programs using the subprocess module, a project for star charts and maps, and a tool for trend detection in Python. This episode is sponsored by DataDriven. Spotlight: Codex for Python Developers: Hands-On Agentic Coding Course Most Python developers use AI as fancy autocomplete. This 2-day live course teaches you to build entire projects with Codex, an AI agent that works inside your codebase. Topics: 00:00:00 – Introduction 00:02:48 – PSF Board Election Dates for 2026 00:03:28 – Python 3.15.0 beta 3 is here! 00:03:58 – PEP 835: Shorthand Syntax for Annotated Type Metadata 00:05:13 – Announcing the Search for a DSF Executive Director 00:05:53 – Django 6.1 beta 1 released 00:06:24 – PyData London 26 Videos Released 00:06:50 – Implementing Interfaces in Python: ABCs and Protocols 00:07:36 – Building Python Skills for the Job Market 00:08:21 – Context Engineering for Python Codebases 00:09:14 – Python for Data Analysis: A Practical Guide 00:09:47 – Using LlamaIndex for RAG in Python 00:10:07 – Django Tasks: Exploring the Built-in Tasks Framework 00:10:59 – Plugins Case Study: Pluggy 00:15:10 – Sponsor: DataDriven 00:15:57 – Pyodide 314.0 Release 00:18:54 – Python in a Sandbox With MicroPython and WASM 00:22:35 – The subprocess Module: Wrapping Programs With Python 00:30:08 – Spotlight: Codex for Python Developers 00:31:51 – Are You Expected to Run 5 Type-Checkers Now? 00:39:41 – starplot: ✨ Star charts and maps in Python 00:42:01 – marimo-tutorials: Collection of Marimo Tutorials 00:42:48 – pytrendy: Trend Detection in Python 00:44:35 – Thanks and goodbye News: PSF Board Election Dates for 2026 Python 3.15.0 beta 3 is here! - Python Insider PEP 835: Shorthand Syntax for Annotated Type Metadata (Added) Announcing the Search for a DSF Executive Director Django 6.1 beta 1 released - Django Weblog PyData London 26 Videos Released Real Python News: Implementing Interfaces in Python: ABCs and Protocols Building Python Skills for the Job Market Context Engineering for Python Codebases Python for Data Analysis: A Practical Guide Using LlamaIndex for RAG in Python Django Tasks: Exploring the Built-in Tasks Framework Topics: Plugins Case Study: Pluggy – Pluggy is an open source plugin system used by frameworks such as pytest and tox. This article introduces you to how it works and what you can do with it. Pyodide 314.0 Release – This post announces the Pyodide 314.0 release and describes its features, including a focus on standardization and packaging. You can now build Pyodide wheels and post them to PyPI. Python in a Sandbox With MicroPython and WASM – Simon’s been in search of the perfect code sandbox. This article is about his latest attempt and covers why he wants a sandbox and what tech he’s used to achieve it. The subprocess Module: Wrapping Programs With Python – Python’s subprocess module allows you to run shell commands and manage external processes directly from your Python code. By using subprocess, you can execute shell commands like ls or dir, launch applications, and handle both input and output streams. Are You Expected to Run 5 Type-Checkers Now? – Library maintainers may feel overwhelmed by the plurality of type checkers that exist. We offer some guidance on how to focus their efforts where they matter most. Projects: starplot: ✨ Star charts and maps in Python marimo-tutorials: Collection of Marimo Tutorials pytrendy: Trend Detection in Python Additional Links: Episode #226: PySheets: Spreadsheets in the Browser Using PyScript Datasette: An open source multi-tool for exploring and publishing data Exploring Astrophysics in Python With pandas and Matplotlib Using Astropy for Astronomy With Python Investigating Quasar Data With Polars and Interactive marimo Notebooks JupyterLite — JupyterLite 0.8.0 documentation DataDriven - Data Engineer Interview Practice Problems Level up your Python skills with our expert-led courses: Using Astropy for Astronomy With Python Using LlamaIndex for RAG in Python Building Python Skills for the Job Market Support the podcast & join our community of Pythonistas

  • #300
    June 26 · 46 min

    Maintaining Your Python Developer Instincts While Using LLM Tools

    Do you feel like your Python skills are atrophying after using LLM coding tools? How do you add the right kind of friction into your coding routine to keep your developer instincts sharp? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. We discuss a recent article by previous guest Bob Belderbos about developers keeping their instincts when AI is writing the code. He stresses the importance of the right kind of friction for maintaining skills and scheduling a deliberate coding practice routine. We also share other articles and projects from the Python community, including new releases, a roundup of recent Real Python tutorials and video courses, sending emails with Python, libraries to enhance your Python Polars workflows, exploring Django Integrity-Policy, a next-generation HTTP client for Python, and a project to detect lazy imports incompatibilities. This episode is sponsored by AURI by Endor Labs Course Spotlight: Accessing Multiple AI Models With the OpenRouter API Access models from popular AI providers in Python through OpenRouter’s unified API with smart routing, fallbacks, and cost controls. Topics: 00:00:00 – Introduction 00:02:53 – Python 3.14.6, 3.13.14, and 3.15.0b2 Released 00:03:20 – Django Security Releases Issued: 6.0.6 and 5.2.15 00:03:35 – PyPy v7.3.23 Released 00:04:25 – Python sleep(): How to Add Time Delays to Your Code 00:04:59 – Structuring Your Python Script 00:05:36 – How to Use GitHub Copilot Code Review in Pull Requests 00:06:13 – Accessing Multiple AI Models With the OpenRouter API 00:07:25 – Cursor vs Windsurf: Which AI Code Editor Is Best for Python? 00:08:28 – Sending Emails With Python 00:16:31 – Sponsor:AURI from Endor Labs 00:17:17 – Announcing Polars 1.41 00:19:43 – Libraries for Your Python Polars Workflows 00:23:42 – Django: Introducing Django-Integrity-Policy 00:28:39 – Video Course Spotlight 00:30:21 – Keep Your Developer Instincts When AI Writes the Code 00:39:58 – Lifeguard: Detect Lazy Imports Incompatibilities 00:42:46 – httpx2: A Next Generation HTTP Client for Python 00:45:34 – Thanks and goodbye News: Python 3.14.6 and 3.13.14 Released Python 3.15.0b2 Released Django Security Releases Issued: 6.0.6 and 5.2.15 PyPy v7.3.23 Released Real Python News: Python sleep(): How to Add Time Delays to Your Code - Tutorial Structuring Your Python Script - Video Course How to Use GitHub Copilot Code Review in Pull Requests – Tutorial Accessing Multiple AI Models With the OpenRouter API – Video Course Cursor vs Windsurf: Which AI Code Editor Is Best for Python? – Tutorial Show Links: Sending Emails With Python – Learn how to send emails with Python using SMTP, attach files, format HTML messages, and personalize bulk emails for your contact list. Announcing Polars 1.41 – Polars 1.41 is out and this post covers the new features it includes. Learn about faster parquet metadata decoding, nested subplan elimination, and more. Libraries for Your Python Polars Workflows – Four excellent libraries for your data science workflow with support for Polars DataFrames Django: Introducing Django-Integrity-Policy – Recently, browsers have added support for the new Integrity-Policy response header (Firefox 145+, Chrome 138+). Adam quickly went to work to build a library that enables your Django project to take advantage of the feature. How to Keep Your Developer Instincts When AI Writes the Code – The promise was less friction. The cost, it turns out, is instinct, a high price to pay. Bob’s answer: add deliberate practice to your routine, and keep the struggle. Projects: Lifeguard: Detect Lazy Imports Incompatibilities httpx2: A Next Generation HTTP Client for Python Additional Links: OpenRouter Episode #214: Build Captivating Display Tables in Python With Great Tables Using ggplot in Python: Visualizing Data With plotnine – Tutorial Learning Rust Made Me a Better Python Developer HTTPXYZ AURI for Developers - AI-Native AppSec Platform - Endor Labs Level up your Python skills with our expert-led courses: Graph Your Data With Python and ggplot Structuring Your Python Script Accessing Multiple AI Models With the OpenRouter API Support the podcast & join our community of Pythonistas

  • #299
    June 12 · 40 min

    EuroPython 2026: Celebrating 25 Years

    What’s happening at EuroPython 2026? The conference celebrates its 25th anniversary this year in Kraków, Poland. This week on the show, organizers Mia Bajić and Daria Linhart Grudzien join me to discuss this year’s conference. Mia serves as the Vice Chair of the EuroPython Society, and Daria leads the EuroPython communications team. We dig into the details of the conference, including the wide variety of tracks, the reasoning for selecting the location, and the additional activities surrounding the event. We talk about volunteering, organizing, and continuing support for conferences. Mia and Daria also share the talks they’re excited to check out and how they use Python currently. Course Spotlight: Building Command Line Interfaces With argparse In this step-by-step Python video course, you’ll learn how to take your command line Python scripts to the next level by adding a convenient command line interface that you can write with argparse. Topics: 00:00:00 – Introduction 00:02:27 – EuroPython 2026 details 00:05:02 – Daria and Mia’s roles with the conference 00:09:08 – Practices to continue growing a conference 00:13:16 – What makes EuroPython different? 00:18:40 – Video Course Spotlight 00:20:17 – Wide variety of tracks, talks, and topics 00:28:54 – How are you using Python currently? 00:32:38 – What are you excited about in the world of Python? 00:35:12 – What do you want to learn next? 00:37:30 – How can people follow the work you do online? 00:39:06 – Thanks and goodbye Show Links: EuroPython 2026 - July 13-19, 2026 - Kraków, Poland 🎂 25th Anniversary of EuroPython: Social Media Challenge 🎂 Schedule for 2026 ICE Kraków Congress Centre EuroPython: Overview - LinkedIn EuroPython Conference - YouTube EuroPython - Fosstodon EuroPython Conference (@europython) - Instagram EuroPython (@europython) - TikTok EuroPython 2026, Kraków (@europython.eu) - Bluesky EuroPython (@europython) - X Mia Links: Mia Bajić - LinkedIn Mia Bajić (@clytaemnestra_) - Instagram Mia Bajić (@clytaemnestra.bsky.social) - Bluesky Behind the Commit - YouTube mia@europython.eu Daria Links: Daria Linhart Grudzien - LinkedIn daria@europython.eu Level up your Python skills with our expert-led courses: Building Command Line Interfaces With argparse Structuring Your Python Script Accessing Multiple AI Models With the OpenRouter API Support the podcast & join our community of Pythonistas

  • #298
    June 5 · 38 min

    Reducing the Size of Python Docker Containers

    How can you easily reduce the size of a Python Docker container? What are the exceptions you should catch in your code? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. We cover a tutorial by Khuyen Tran at CodeCut about shrinking the size of a Python Docker container. The piece explores SlimToolKit, which analyzes a container at runtime, identifies what files are used, and then builds a minimal image with only those dependencies. We dig into a recent piece by Trey Hunner about Python exceptions. When trying to determine a strategy to handle potential errors, which exceptions should you catch and which should you leave unhandled? We also share other articles and projects from the Python community, including recent releases, two PEPs that have been deferred to 3.16, a critical vulnerability in an open-source ASGI framework, resolving a lazy import manually, a project to anonymize sensitive PII data, and a tool for loading Django settings from a TOML file. This episode is sponsored by AURI by Endor Labs. Course Spotlight: Raising and Handling Python Exceptions In this course, you’ll learn what an exception is and how it differs from a syntax error. You’ll learn about raising exceptions, making assertions, and catching exceptions to change the control flow of your program using the try, except, else, and finally keywords. Topics: 00:00:00 – Introduction 00:02:32 – Django 6.1 Alpha 1 Released 00:03:07 – Nuitka Python Compiler Release 4.1 00:04:00 – PEP 813: The Pretty Print Protocol (Deferred to 3.16) 00:04:28 – PEP 830: Add Timestamps to Exceptions and Tracebacks 00:04:50 – Millions of AI agents imperiled by critical vulnerability in open source package 00:07:27 – What Types of Exceptions Should You Catch? 00:13:28 – Sponsor: AURI from Endor Labs 00:14:18 – PyCon US 2026 Packaging Summit Recap 00:18:39 – Slim Down Python Docker Containers 00:24:17 – Video Course Spotlight 00:25:45 – Resolve a Lazy Import Manually 00:28:04 – presidio: Detect, Redact, & Anonymize Sensitive Data (PII) 00:32:37 – dj-toml-settings: Load Django settings from a TOML file 00:37:14 – Thanks and goodbye News: Django 6.1 Alpha 1 Released Nuitka Python Compiler Release 4.1 PEP 813: The Pretty Print Protocol (Deferred to 3.16) PEP 830: Add Timestamps to Exceptions and Tracebacks (Deferred to 3.16) Millions of AI agents imperiled by critical vulnerability in open source package - Ars Technica Missing Host header validation poisons request.url.path, bypassing path-based security checks · Advisory · Kludex/starlette Show Links: What Types of Exceptions Should You Catch? – The trickiest programming bugs are often caused by catching exceptions that you didn’t mean to catch or handling exceptions in ways that obfuscate the actual error that’s occurring. Which exceptions should you catch and which should you leave unhandled? PyCon US 2026 Packaging Summit Recap – Per-talk notes from the PyCon US 2026 Packaging Summit, including: Emma Smith on Wheel 2.0 and Zstandard compression, Mike Fiedler on PyPI abuse vectors, Mahe Iram Khan on ecosystems, lightning talks on PEP 772, mobile wheels, AI accelerator variants, and the roundtable discussions. Slim Down Python Docker Containers – Learn how SlimToolKit can reduce a Python Docker image by analyzing what your app actually uses at runtime. This tutorial walks through slimming a Chainlit LLM chatbot image, shows where container bloat comes from, and explains how to avoid breaking lazily loaded Python frameworks. Resolve a Lazy Import Manually – Learn how to work around the Python 3.15 machinery to resolve an explicit lazy import manually. TIL #141 – Inspect a lazy import - mathspp Projects: presidio: Detect, Redact, & Anonymize Sensitive Data (PII) dj-toml-settings: Load Django settings from a TOML file Additional Links: Using raise for Effective Exceptions - Real Python Video Course Working With Python’s Built-in Exceptions – Real Python Video Course Episode #177: Welcoming PyPI’s Safety & Security Engineer Mike Fiedler Chainlit - Build AI applications AURI for Developers - AI-Native AppSec Platform - Endor Labs Level up your Python skills with our expert-led courses: Raising and Handling Python Exceptions Advanced Python import Techniques Working With Python's Built-in Exceptions Support the podcast & join our community of Pythonistas

  • #297
    May 29 · 1 hr 20 min

    Improving Python Through PEPs and Protocols

    Have you ever been confused by the naming of modules you’re importing from a package? Is there a standard way to organize and name your Python virtual environments? This week on the show, Brett Cannon returns to discuss the Python Enhancement Proposals (PEPs) he’s been working on recently. We start with PEP 794, which extends the metadata fields for Python packages to specify the import names a project provides. The metadata will help developers identify the correct project to install when they know the import name or the importable module names a project provides once installed. We dive back into WebAssembly to discuss PEP 816, which specifies the WASI support in CPython releases. We also wade into the controversy around PEP 832, which proposes standards around naming and the discovery of virtual environments. Brett shares his motivation for being a prolific author and supporter of PEPs. We discuss his promotion of standards and protocols to simplify the Python ecosystem for current and future developers. Course Spotlight: Tapping Into the Zen of Python Explore the Zen of Python and its 19 guiding principles for writing readable, practical code. Learn its history, jokes, and meaning. Topics: 00:00:00 – Introduction 00:02:01 – Prolific PEP creation 00:03:37 – Improving the future of Python through standards 00:09:30 – PEP 794 - Import Name Metadata 00:30:12 – PEP 816 - WASI (WebAssembly System Interface) Support 00:40:55 – Why the interest in WASI? 00:45:23 – Video Course Spotlight 00:47:07 – PEP 832 - Virtual Environment Discovery 01:10:02 – Type Server Protocol 01:17:41 – How can people follow your work online? 01:19:12 – Thanks and goodbye Show Links: Tall, Snarky Canadian PEP 794 – Import Name Metadata Towards fixing Python project names and import modules - Goran et al. PEP 816 – WASI Support State of WASI support for CPython: March 2026 PEP 11 – CPython platform support PEP 816: How Python is getting serious about WASM - InfoWorld PEP 832 – Virtual environment discovery Discussions on Python.org - PEP 832: virtual environment discovery Type Server Protocol = Abstract out type information type-server-protocol.md - GitHub - microsoft/pylance-release Frequently Asked Questions - Open Source by Brett Cannon Brett Cannon - mastodon.social Level up your Python skills with our expert-led courses: Writing Beautiful Pythonic Code With PEP 8 uv vs pip: Python Packaging and Dependency Management Tapping Into the Zen of Python Support the podcast & join our community of Pythonistas

  • #296
    May 22 · 42 min

    Managing Polars Schema Issues & Profiling GitHub Users

    How can you avoid schema problems in your Polars data pipeline when adding new columns? How can you quickly examine a GitHub user’s profile to decide how much to invest in their contributions? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. Christopher shares a recent article about handling schema issues in Python Polars. The piece covers ways that a schema change can break your data pipeline. It provides strategies to avoid and resolve issues. We cover a recent project from previous guest Eric Matthes to investigate GitHub profiles of a potential contributor. With the rise of AI-slop pull requests, the tool can provide valuable background on the user. We also share other articles and projects from the Python community, including recent releases, exploring four different “get” special methods, what’s new in Pip 26.1, inverse Sapir-Whorf and programming languages, and a Python scripting framework for CAD. This episode is sponsored by Six Feet Up. Course Spotlight: Working With Python Polars Welcome to the world of Polars, a powerful DataFrame library for Python. In this video course, you’ll get a hands-on introduction to Polars’ core features and see why this library is catching so much buzz. Topics: 00:00:00 – Introduction 00:02:51 – Python 3.14.5 is out! 00:03:16 – Python 3.15.0 beta 1 is here! 00:03:34 – PyPy v7.3.22 Released 00:03:45 – Django Security Releases: 6.0.5 and 5.2.14 00:04:04 – 2026 Django Developers Survey 00:04:24 – PEP 797: Shared Object Proxies (Deferred to 3.16) 00:04:40 – PEP 828: Supporting ‘Yield From’ in Asynchronous Generators 00:05:59 – Do You Get It Now? 00:11:54 – Sponsor: Six Feet Up 00:12:47 – Handling Schema Issues in Polars 00:17:10 – What’s New in Pip 26.1 00:24:27 – Video Course Spotlight 00:25:39 – Inverse Sapir-Whorf and Programming Languages 00:34:04 – cadquery: CAD Scripting Framework 00:38:16 – gh-profiler: Examine a GH user’s profile 00:40:46 – Thanks and goodbye News: Python 3.14.5 is out! - Python Insider Python 3.15.0 beta 1 is here! - Python Insider PyPy v7.3.22 Released Django Security Releases: 6.0.5 and 5.2.14 2026 Django Developers Survey - Django PEP 797: Shared Object Proxies (Deferred to 3.16) PEP 828: Supporting ‘Yield From’ in Asynchronous Generators (Deferred to 3.16) Topics: Do You Get It Now? – Learn about Python’s .__getitem__(), .__getattr__(), .__getattribute__(), and .__get__(): how they’re different and where to use them. Handling Schema Issues in Polars – You’ve got this great data pipeline going until one day it stops working. A schema error caused by a column upstream has stopped you in your tracks. This post talks about the four different causes of schema errors and what to do about them. What’s New in Pip 26.1 – pip 26.1 adds support for dependency cooldowns, experimental support for reading/installing from standard lockfiles (pylock.toml), fixes several long-standing limitations of the 2020 resolver, and drops support for Python 3.9. Inverse Sapir-Whorf and Programming Languages – The Sapir-Whorf hypothesis is the idea that the languages you speak influence the thoughts you can have. The inverse is the idea that your language limits what you can’t say. When applied to programming, this has subtle results determining core ideas like execution order. Projects: cadquery: CAD Scripting Framework gh-profiler: Examine a GH user’s profile, to help quickly decide how much to invest in their contributions. Additional Links: The Weird and Wonderful World of Descriptors in Python Episode #260: Harnessing the Power of Python Polars Episode #280: Considering Fast and Slow in Python Programming We should all be using dependency cooldowns - William Woodruff PEP 723: Inline script metadata What’s new in pip 26.0 - prerelease and upload-time filtering! - Richard Si The AI boom is based on a fundamental mistake - The Verge CadQuery Documentation FreeCAD: Your own 3D parametric modeler Level up your Python skills with our expert-led courses: Introduction to Git and GitHub for Python Working With Python Polars Working With Missing Data in Polars Support the podcast & join our community of Pythonistas

  • #295
    May 15 · 1 hr 24 min

    Agentic Architecture: Why Files Aren't Always Enough

    What are the limitations of using a file-based agent workflow? Why do massive context windows tend to collapse? This week on the show, Mikiko Bazeley from MongoDB joins us to discuss agentic architecture and context engineering. Mikiko is an applied AI engineer. She helps developers and organizations build AI and ML applications using MongoDB. We dig into the debate of files versus a database. What are some of the limitations of building an agent with just a folder of files? We explore the surprising limitations of massive context windows and strategies for fixing them. Mikiko also shares advice and resources to help you get up to speed on building your own agent skills. Our conversation touches on multiple topics in the current development landscape. This episode is sponsored by SerpApi. Video Course Spotlight: Building Type-Safe LLM Agents With Pydantic AI Build type-safe LLM agents in Python with Pydantic AI using structured outputs, function calling, and dependency injection. Topics: 00:00:00 – Introduction 00:02:31 – Catching up with MongoDB 00:07:02 – Are the files all you need? 00:15:14 – What is a workflow agent? 00:24:43 – Sponsor: SerpApi 00:25:45 – Model vs harness 00:29:57 – Context rot and tool loadouts 00:41:07 – Sharing state and coordination of agents 00:47:27 – Video Course Spotlight 00:49:16 – What do dataflows look like 01:00:38 – The human-in-the-loop & coding agents 01:10:30 – Resources to explore 01:17:49 – What are you excited about in the world of Python? 01:18:38 – What do you want to learn next? 01:22:54 – Thanks and goodbye Show Links: The “files are all you need” debate misses what’s actually happening in agent memory architecture - The New Stack MongoDB: The World’s Leading Modern Data Platform Karpathy shares ‘LLM Knowledge Base’ architecture that bypasses RAG with an evolving markdown library maintained by AI - VentureBeat Files Are All You Need: Context, Search, Skills Guide | LlamaIndex Converged Datastore For Agentic AI - MongoDB Why Developers Need Vector Search - The New Stack Why Multi-Agent Systems Need Memory Engineering – O’Reilly The New Skill in AI is Not Prompting, It’s Context Engineering - Phil Schmid How Long Contexts Fail - dbreunig.com How to Fix Your Context - dbreunig.com AI Agents Need Memory Control Over More Context - arxiv.org AINews - Is Harness Engineering real? - Latent.Space The Model vs. the Harness: Which Actually Matters More? Embeddings and Vector Databases With ChromaDB – Real Python 12-factor-agents: What are the principles we can use to build LLM-powered software that is actually good enough to put in the hands of production customers? The Twelve-Factor App MongoDB Courses and Trainings - MongoDB University mongodb-mcp-server: A Model Context Protocol server to connect to MongoDB databases and MongoDB Atlas Clusters. What is the MongoDB MCP Server? - MongoDB Docs mongo-python-driver: PyMongo - the Official MongoDB Python driver agent-skills: Use the official MongoDB Skills with your favorite coding agent to build faster. Reachy Mini - Open-Source Desktop Humanoid Robot 👩🏻‍💻 Mikiko B. - LinkedIn Building AI Products From Scratch - Mikiko Bazeley - Substack Level up your Python skills with our expert-led courses: Using Pydantic to Simplify Python Data Validation Getting Started With Claude Code Building Type-Safe LLM Agents With Pydantic AI Support the podcast & join our community of Pythonistas

  • #294
    May 8 · 56 min

    Declarative Charts in Python & Discerning Iterators vs Iterables

    What if you could build charts in Python by describing what your data means, instead of scripting every visual detail? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. We cover a recent Real Python article about the data visualization library Altair. Most tools require you to write detailed boilerplate code to set up the axis and figure. Altair follows a declarative approach where you specify which columns go to which axis, the type of chart or plot, and what should be interactive. We also share other articles and projects from the Python community, including recent releases, clarifying the differences between iterators and iterables, decoupling your business logic from the Django ORM, comparing an LLM-based tool for web scraping against Playwright, a neural network emulator for guitar amplifiers, and a CLI tool to generate ASCII art of the current moon phase. This episode is sponsored by Build Your Own Coding Agent. Video Course Spotlight: Use Codex CLI to Enhance Your Python Projects Learn how to use Codex CLI to add features to Python projects directly from your terminal, without needing a browser or IDE plugins. Topics: 00:00:00 – Introduction 00:02:38 – Read the Docs Now Supports uv Natively 00:03:09 – Reverting the Incremental GC in Python 3.14 and 3.15 00:04:51 – Altair: Declarative Charts With Python 00:12:23 – Sponsor: Build Your Own Coding Agent 00:13:17 – Decoupling Your Business Logic From the Django ORM 00:19:51 – browser-use vs. Playwright: Which to Pick for Web Scraping? 00:26:58 – 2048: iterators and iterables - Ned Batchelder 00:31:31 – Video Course Spotlight 00:33:00 – Discussion: Jumping back into solo developer mode 00:46:59 – neural-amp-modeler: Neural network emulator for guitar amplifiers 00:51:48 – ascii-moon-phase-python: CLI for ASCII art of the current moon phase 00:53:11 – Thanks and goodbye 00:54:43 – Appendix: Neural Amp Modeler - Demo News: Read the Docs Now Supports uv Natively – Popular open source documentation site Read the Docs has announced they now support native uv in .readthedocs.yaml for Python dependency installation. Learn how to use it in your configurations Reverting the Incremental GC in Python 3.14 and 3.15 Fixing a Memory “Leak” From Python 3.14’s Incremental Garbage Collection – Adam encountered an out-of-memory error while migrating a client project to Python 3.14. The issue occurred when running Django’s database migration command on a limited-resource server, and seemed to be caused by the new incremental garbage collection algorithm in Python 3.14. Show Links: Altair: Declarative Charts With Python – Build interactive Python charts the declarative way with Altair. Map data to visual properties and add linked selections. No JavaScript required. Decoupling Your Business Logic From the Django ORM – Where should I keep my business logic? This is a perennial topic in Django. This article proposes a continuum of cases, each with increasing complexity. browser-use vs. Playwright: Which to Pick for Web Scraping? – Follow along in this walk-through building a Hacker News synthesizer with browser-use, then see it fail on a harder Newegg scraping task. Includes a side-by-side comparison with Playwright and a breakdown of when each tool is the right call. 2048: iterators and iterables - Ned Batchelder – Making a terminal based version of the 2048 game, Ned waded into a classic iterator/iterable confusion. This article shows you how they’re different and how confusing them can cause you problems in your code. Projects: neural-amp-modeler: Neural network emulator for guitar amplifiers ascii-moon-phase-python: Command line program that outputs ASCII art of the current moon phase Additional Links: Vega-Altair: Declarative Visualization in Python — Vega-Altair 6.1.0dev documentation Iterators and Iterables in Python: Run Efficient Iterations – Real Python Neural Amp Modeler - Highly-accurate free and open-source amp modeling plugin TONE3000 Official · Neural Amp Modeler (NAM) Profiles and Impulse Responses (IR’s) Level up your Python skills with our expert-led courses: Graph Your Data With Python and ggplot Efficient Iterations With Python Iterators and Iterables Use Codex CLI to Enhance Your Python Projects Support the podcast & join our community of Pythonistas

  • #293
    May 1 · 1 hr 4 min

    Agentic Data Science Pair Programming With marimo pair

    How do you add agent skills to your data science workflow? How can a coding agent assist with data wrangling and research? This week on the show, Trevor Manz from marimo joins us to discuss marimo pair. Trevor is a founding engineer at marimo, where he’s been working on integrating LLM tools with marimo. We discuss the balancing act of building a skill and determining how to give an agent access to all the variables in a notebook. He shares how they built a specialized reactive REPL that eliminates hidden state and allows the agent to continue constructing a reproducible Python program. We dig into installing and getting started with marimo pair. Trevor also covers several of the tasks an agent can tackle in a data science workflow. Video Course Spotlight: Getting Started With marimo Notebooks Discover how marimo notebook simplifies coding with reactive updates, UI elements, and sandboxing for safe, sharable notebooks. Topics: 00:00:00 – Introduction 00:02:26 – Trevor’s role at marimo 00:03:08 – Current AI tools in marimo 00:06:26 – Describing marimo notebooks 00:10:11 – What is marimo pair? 00:18:49 – Building an agent skill 00:27:34 – Setup & installation 00:31:16 – Video Course Spotlight 00:32:42 – Examples of EDA and data wrangling 00:45:46 – Experimenting inside of a notebook 00:50:40 – Managing context 00:53:25 – Accessing additional libraries 00:57:16 – Recent tools and updates from the marimo community 00:59:31 – What are you excited about in the world of Python? 01:01:10 – What do you want to learn next? 01:02:26 – How can people follow your work online? 01:03:13 – Thanks and goodbye Show Links: Introducing marimo pair - marimo marimo-pair: Drop agents inside running marimo notebook sessions Marimo pair – Reactive Python notebooks as environments for agents - Hacker News Episode #230: marimo: Reactive Notebooks and Deployable Web Apps in Python marimo Pair - YouTube We gave Claude Access to All Python Variables - YouTube Using the marimo editor’s AI features - marimo ty: An extremely fast Python type checker and language server, written in Rust. molab - marimo marimo: A Reactive, Reproducible Notebook – Real Python Investigating Quasar Data With Polars and Interactive marimo Notebooks – Real Python Blog - marimo Trevor Manz - LinkedIn trevor manz (@manzt.sh) — Bluesky Level up your Python skills with our expert-led courses: Getting Started With marimo Notebooks Investigating Quasar Data With Polars and Interactive marimo Notebooks Getting Started With Claude Code Support the podcast & join our community of Pythonistas

  • #292
    April 24 · 45 min

    Becoming a Better Python Developer Through Learning Rust

    How can learning Rust help make you a better Python Developer? How do techniques required by a compiled language translate to improving your Python code? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. We discuss a recent article by Bob Belderbos titled “Learning Rust Made Me a Better Python Developer.” Bob has been on a journey learning to program in Rust, which has made him rethink how he’s been writing Python. The compiler forced him to confront things he’d been ignoring. We also share other articles and projects from the Python community, including recent releases, a boatload of PEPs, NumPy as a synth engine, firing and forgetting with Python’s asyncio, managing state with signals in Python, a documentation site generator for Python packages, and a tool to explain your Python environment. This episode is sponsored by AgentField. Video Course Spotlight: Using Loguru to Simplify Python Logging Learn how to use Loguru for simpler Python logging, from zero-config setup and custom formats to file rotation, retention, and adding context. Topics: 00:00:00 – Introduction 00:02:23 – Python 3.15.0a8, 3.14.4 and 3.13.13 Released 00:03:01 – Django Security Releases: 6.0.4, 5.2.13, and 4.2.30 00:03:38 – DjangoCon Europe 2027 Call for Organizers 00:04:04 – PEP 803: "abi3t": Stable ABI for Free-Threaded Builds 00:04:44 – PEP 829: Structured Startup Configuration via .site.toml File 00:05:18 – PEP 830 – Add timestamps to exceptions and tracebacks 00:05:44 – PEP 831 – Frame Pointers Everywhere: Enabling System-Level Observability for Python 00:06:59 – PEP 832 – Virtual environment discovery 00:10:13 – PyCoder’s Weekly - Submit a Link 00:11:15 – NumPy as Synth Engine 00:21:04 – Sponsor: AgentField 00:22:05 – Fire and Forget at Textual 00:25:39 – Learning Rust Made Me a Better Python Developer 00:34:06 – Video Course Spotlight 00:35:49 – Signals: State Management for Python Developers 00:40:34 – great-docs: Documentation Site Generator for Python Package 00:42:32 – pywho: Explain Your Python Environment and Detect Shadows 00:44:01 – Thanks and goodbye News: Python 3.15.0a8, 3.14.4 and 3.13.13 Released Django Security Releases: 6.0.4, 5.2.13, and 4.2.30 DjangoCon Europe 2027 Call for Organizers PEP 803: "abi3t": Stable ABI for Free-Threaded Builds (Accepted) PEP 829: Structured Startup Configuration via .site.toml Files (Added) PEP 830 – Add timestamps to exceptions and tracebacks PEP 831 – Frame Pointers Everywhere: Enabling System-Level Observability for Python PEP 832 – Virtual environment discovery PyCoder’s Weekly - Submit a Link The Real Python Podcast Show Links: NumPy as Synth Engine – Kenneth has “recorded” a song in a Python script. The catch? No sampling, no recording, no pre-recorded sound. Everything was done through generating wave functions in NumPy. Learn how to become a mathematical musician. Fire and Forget at Textual – In this follow up to a previous article (Fire and forget (or never) with Python’s asyncio, Michael discusses a similar article by Will McGugan as it relates to Textual. He found the problematic pattern in over 500K GitHub files. Learning Rust Made Me a Better Python Developer – Bob thinks that learning Rust made him a better Python developer. Not because Rust is better, but because it made him think differently about how he has been writing Python. The compiler forced him to confront things he’d been ignoring. Signals: State Management for Python Developers – If you’ve ever debugged why your cache didn’t invalidate or notifications stopped firing after a “simple” state change, this guide is for you. Signals are becoming a JavaScript standard, but Python developers can use the same patterns to eliminate “forgot to update that thing” bugs. Projects: great-docs: Documentation Site Generator for Python Packages pywho: Explain Your Python Environment and Detect Shadows Additional Links: Open Source Gave Me Everything Until I Had Nothing Left to Give - Kenneth Reitz Yeah… this was impressive to see. #tabla - Escalated Quickly - YouTube PyTheory Is Awesome - Kenneth Reitz PyTheory: Music Theory for Humans – PyTheory 0.42.1 documentation A Mini DAW in the Python REPL - Kenneth Reitz Episode #210: Creating a Guitar Synthesizer & Generating WAV Files With Python Angine de Poitrine - Vidéos Episode #195: Building a Healthy Developer Mindset While Learning Python Bite‑sized Rust learning, powered by Pybites Episode #214: Build Captivating Display Tables in Python With Great Tables Level up your Python skills with our expert-led courses: NumPy Techniques and Practical Examples Thread Safety in Python: Locks and Other Techniques Using Loguru to Simplify Python Logging Support the podcast & join our community of Pythonistas

  • #291
    April 17 · 1 hr 15 min

    Reassessing the LLM Landscape & Summoning Ghosts

    What are the current techniques being employed to improve the performance of LLM-based systems? How is the industry shifting from post-training towards context engineering and multi-agent orchestration? This week on the show, Jodie Burchell, data scientist and Python Advocacy Team Lead at JetBrains, returns to discuss the current AI coding landscape. In our last conversation, Jodie covered how LLMs were approaching the limits of scaling laws. This time, we recap last year’s big focus on reasoning models and a post-training method called “reinforcement learning from verifiable rewards” (RLVR). We also cover test-time compute, where models spend more time reasoning through steps and considering multiple approaches to solve a problem. We touch on Agent Context Protocol (ACP), agent orchestration layers, and context engineering. We also share some concerns about the hype cycle, maintaining all that code being generated, and running local models. Course Spotlight: Vector Databases and Embeddings With ChromaDB Learn how to use ChromaDB, an open-source vector database, to store embeddings and give context to large language models in Python. Topics: 00:00:00 – Introduction 00:02:02 – Build a Language-Learning Agent course 00:02:55 – Update on the past six months of LLMs 00:05:32 – Reinforcement Learning From Verifiable Rewards 00:07:32 – Test Time Compute 00:08:36 – 2025 and the rise of agents 00:14:24 – Benchmarks shifting 00:15:23 – Andrew Karpathy and jagged intelligence 00:19:16 – Not evolving or growing animals but summoning ghosts 00:23:34 – Diminishing gains in newer models 00:24:23 – Context Engineering 00:35:01 – Multi-agent systems and diversity of models 00:36:56 – Video Course Spotlight 00:38:34 – Current generation of coding agents 00:44:00 – Fast vs deep reasoning 00:45:18 – Agent Context Protocol 00:50:19 – Working through the hype cycle 00:55:43 – Open-source contribution pollution 00:57:21 – Local models 00:58:36 – Rick Beato comparing how the music industry failed 01:08:41 – LLMs are an amazing development 01:11:33 – Keynote talk on AI summers and winters 01:12:45 – PyCon US and EuroPython 01:14:11 – Thanks and goodbye Show Links: AI Agent Course - Build a Language‑Learning Agent with OpenAI, LangGraph, Ollama & MCP - YouTube Episode #264: Large Language Models on the Edge of the Scaling Laws Reinforcement Learning with Verifiable Rewards Implicitly Incentivizes Correct Reasoning in Base LLMs Reinforcement learning with verifiable rewards (RLVR) What is test-time compute and how to scale it? Overfitting - Wikipedia 2025 LLM Year in Review - karpathy Animals vs Ghosts - karpathy Agent Context Protocols Enhance Collective Inference Open source AI we use to work on Wagtail - Wagtail CMS LLMs for Devs: Model Selection, Hallucinations, Agents, AGI – Jodie Burchell - The Marco Show Keynote - Can you trust your (large language) model? - Standard error The Human-in-the-Loop is Tired How AI Will Fail Like The Music Industry - YouTube “Yes, AI Is a Bubble. There Is No Question.” - The Ringer Keynote: AI is having its moment … again - Jodie Burchell - NDC Copenhagen 2025 PyCon US 2026 EuroPython 2026 - July 13th-19th 2026 - Kraków, Poland Jodie Burchell (@t-redactyl.bsky.social) — Bluesky Standard error Level up your Python skills with our expert-led courses: Getting Started With Claude Code Getting Started With Google Gemini CLI Vector Databases and Embeddings With ChromaDB Support the podcast & join our community of Pythonistas

  • #290
    April 10 · 54 min

    Advice on Managing Projects & Making Python Classes Friendly

    What goes into managing a major project? What techniques can you employ for a project that’s in crisis? Christopher Trudeau is back on the show this week with another batch of PyCoder’s Weekly articles and projects. We discuss an article by Ben Kuhn titled, “How I’ve Run Major Projects.” We dig into the skills required for project management, and provide advice for when projects fall into crisis. We cover how the field’s terminology has been updated. However, the time investment, sober communication, and planning still remain at the core of successful projects. We also share other articles and projects from the Python community, including recent releases and announcements, exploring an IDE for data science development, using Python set comprehensions, making friendly classes, using atexit for cleanup, a high-performance caching library for Python written in Rust, and a curated list of awesome marimo things. This episode is sponsored by PropelAuth. Video Course Spotlight: Using Data Classes in Python When using data classes, you don’t have to write boilerplate code to get proper initialization, representation, and comparisons for your objects. Topics: 00:00:00 – Introduction 00:02:15 – Starlette 1.0 Released 00:03:08 – PyOhio 2026 Call for Proposals Now Open! 00:03:42 – Spyder: Your IDE for Data Science Development in Python 00:11:04 – Python Set Comprehensions: How and When to Use Them 00:14:40 – Sponsor: PropelAuth 00:15:17 – Making Friendly Classes 00:23:51 – How to Use atexit for Cleanup 00:25:49 – Video Course Spotlight 00:27:14 – How I’ve run major projects 00:47:47 – awesome-marimo: Curated List of Awesome Marimo Things 00:51:37 – moka-py: A high performance caching library for Python written in Rust 00:53:24 – Thanks and goodbye News: Starlette 1.0 Released PyOhio 2026 Call for Proposals Now Open! Show Links: Spyder: Your IDE for Data Science Development in Python – Learn how to use the Spyder IDE, a Python code editor built for scientists, engineers, and data analysts working with data-heavy workflows. Python Set Comprehensions: How and When to Use Them – In this tutorial, you’ll learn how to write set comprehensions in Python. You’ll also explore the most common use cases for set comprehensions and learn about some bad practices that you should avoid when using them in your code. Making Friendly Classes – What’s a friendly class? One that accepts sensible arguments, has a nice string representation, and supports equality checks. Read on to learn how to write them. How to Use atexit for Cleanup – Divakar recently came across Python’s atexit module and became curious about practical use cases in real-world applications. To explore it, he created a simple client-server app that uses a clean-up function. Discussion: How I’ve run major projects: benkuhn.net Projects: awesome-marimo: Curated List of Awesome Marimo Things moka-py: A high performance caching library for Python written in Rust Additional Links: Positron Data Classes in Python (Guide) – Real Python Episode #230: marimo: Reactive Notebooks and Deployable Web Apps in Python Getting Started With marimo Notebooks – Real Python Investigating Quasar Data With Polars and Interactive marimo Notebooks Level up your Python skills with our expert-led courses: Using Data Classes in Python Getting Started With marimo Notebooks Investigating Quasar Data With Polars and Interactive marimo Notebooks Support the podcast & join our community of Pythonistas

Showing 1–20 of 23 episodes