

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.
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.
Episodes
Mentioned books

5 snips
Mar 11, 2022 • 1h 3min
Tools for Setting Up Python on a New Machine
There are many ways to get Python installed on your computer. If you were going to start fresh, what tools would you use? What if you need to manage multiple versions of Python and virtual environments? What about all the additional tools that make your coding workflow complete? This week on the show, Calvin Hendryx-Parker is here to talk about bootstrapping your Python environment.
Calvin is the co-founder and CTO of Six Feet Up and a Python Web Conference co-organizer. As a consultant, Calvin has set up countless machines to run Python. He configures environments that can scale from in-office projects to distributed cloud-based applications.
We cover tools for installing Python, managing multiple language versions, and configuring virtual environments. Calvin talks about setting up command-line applications in isolated environments. We also discuss traveling with Python on an iPad.
Course Spotlight: Start Managing Multiple Python Versions With pyenv
In this step-by-step course, you’ll learn how to install multiple Python versions and switch between them, including project-specific virtual environments, with ease with pyenv.
Topics:
00:00:00 – Introduction
00:02:42 – Giving talks at IndyPy
00:03:12 – Calvin’s talk “Half a Dozen Ways to Fail at Python”
00:07:41 – Advice on installing Python using Homebrew and pyenv
00:11:48 – The consistency of using a Docker container
00:18:49 – Creating virtual environments and installing packages
00:21:51 – Sponsor: ScoutAPM
00:22:38 – Creating requirements.txt files and moving from pipenv to piptools
00:30:54 – Paying attention to security issues and your software supply chain
00:34:19 – The goal of making a repeatable developer build experience
00:39:30 – Video Course Spotlight
00:40:47 – Using pipx to set up CLI code tools
00:44:52 – Using bpytop to monitor performance
00:46:41 – Tools for using Python on the iPad
00:53:06 – Python Web Conference
00:56:08 – Moving your dotfiles across multiple machines with chezmoi
01:02:22 – Thanks and goodbye
Show Links:
Half a Dozen Ways to Fail at Python – YouTube
calvinhp/2019 WaysToFailAtPython – GitHub
Calvin Hendryx Parker - Bootstrapping your Local Python Environment – YouTube
calvinhp/2021 BootstrappingYourLocalPythonEnvironment – GitHub
Six Feet Up: Python web application development and cloud management services
Homebrew: The Missing Package Manager for macOS (or Linux)
Chocolatey - The package manager for Windows
Python 3 Installation & Setup Guide – Real Python
Your Python Coding Environment on Windows: Setup Guide - Real Python
Managing Multiple Python Versions With pyenv – Real Python
A quick-and-dirty guide on how to install packages for Python
Why you should use “python -m pip”
pypa/pipenv: Python Development Workflow for Humans.
pip-tools · PyPI
safety · PyPI
Production-ready Docker packaging for Python developers
pipx: Install and Run Python Applications in Isolated Environments
bpytop: Resource monitor that shows usage and stats - PyPI
Episode #272 The tools episode - Python Bytes Podcast
Road Warrior Developer – YouTube
5 Ways To Use Python On An iPad
Advanced Visual Studio Code for Python Developers – Real Python
chezmoi: Manage your dotfiles across multiple diverse machines, securely
Python Web Conference 2022 — Python Web Conf 2022
Level up your Python skills with our expert-led courses:
A Beginner's Guide to pip
Installing Python on Windows, macOS, and Linux
Start Managing Multiple Python Versions With pyenv
Support the podcast & join our community of Pythonistas

Mar 4, 2022 • 53min
Defining Optional Arguments and Moving Beyond "Beginner" Python
How do you define Python functions that accept optional arguments or default values? Are you wondering how to go beyond being a beginner with Python? This week on the show, Christopher Trudeau is here, and he’s brought another batch of PyCoder’s Weekly articles and projects.
Christopher shares a Real Python article, “Defining Python Functions With Optional Arguments.” We talk about function flexibility, specifying default values, and using args & kwargs.
We discuss resources for a Python beginner to move beyond the basics and become more competent. Both of us share our experiences moving past these hurdles.
We cover several other articles and projects from the Python community, including a news roundup, ten tools you may have wished you knew when you started working with Python, Python’s zipfile for manipulating your zip files efficiently, how one company optimized Python API server code by 100x, a dependency-free Python library for downloading YouTube videos, and how to use Python on the command line with other shell commands.
Course Spotlight: Defining Python Functions With Optional Arguments
In this video course, you’ll learn about Python optional arguments and how to define functions with default values. You’ll also learn how to create functions that accept any number of arguments using args and kwargs.
Topics:
00:00:00 – Introduction
00:03:08 – Django Project Reformats Entire Codebase With Black
00:03:53 – PEP 673: Self Type Was Accepted
00:05:16 – PEP 654 Accepted: Exception Groups
00:07:45 – Upcoming Python Feature PEPs
00:10:01 – Defining Python Functions With Optional Arguments
00:15:12 – Sponsor: CData Software
00:15:53 – 10 Tools I Wish I Knew When I Started Working With Python
00:23:22 – How We Optimized Python API Server Code 100x
00:29:47 – Python’s zipfile: Manipulate Your ZIP Files Efficiently
00:32:47 – Video Course Spotlight
00:33:59 – How Do I Go From Being a Beginner to Competent in Python?
00:47:02 – pytube: Dependency-Free Python Library for Downloading – YouTube Videos
00:49:30 – pz: Use Python on the Command Line With Other Shell Commands
00:52:23 – Thanks and goodbye
News:
Django Project Reformats Entire Codebase With Black – Related discussion on Hacker News.
PEP 673: Self Type Was Accepted – This PEP introduces a simple and intuitive way to annotate methods that return an instance of their class. This behaves the same as the TypeVar-based approach specified in PEP 484 but is more concise and easier to follow. Related Twitter thread by core dev Raymond Hettinger.
PEP 654 Accepted: Exception Groups – New standard for grouping exceptions together
Upcoming Python Feature PEPs – “These PEPs are a great way of getting the freshest info about what might be included in the upcoming Python releases. So, in this article we will go over all the proposals that are going to bring some exciting new Python features in a near future!”
Topics:
Defining Python Functions With Optional Arguments – Learn about Python optional arguments and how to define functions with default values. You’ll also see how to create functions that accept any number of arguments using *args and **kwargs.
10 Tools I Wish I Knew When I Started Working With Python – Learn about how venvs, flake8, black, isort, pytest, commitizen, semantic-release, pre-commit hooks, and Github Actions work together!
How We Optimized Python API Server Code 100x – Tricks we used to speed up calls to our analytical API written in Python: asyncio, SQLAlchemy, asyncpg, Cython plugins, improved data structures, and replaced some Pandas with NumPy.
Python’s zipfile: Manipulate Your ZIP Files Efficiently – In this guided tutorial, you’ll learn how to manipulate ZIP files using Python’s zipfile module from the standard library. Through hands-on examples, you’ll learn how to read, write, compress, and extract files from your ZIP files quickly.
How Do I Go From Being a Beginner to Competent in Python?
Projects:
pytube: Dependency-Free Python Library for Downloading YouTube Videos
pz: Use Python on the Command Line With Other Shell Commands
Additional Links:
Fluent Python, 2nd Edition
Python Distilled
Intermediate to Advanced resources - Python resources for everybody
The Flask Mega-Tutorial Part I: Hello, World!
Level up your Python skills with our expert-led courses:
Defining Python Functions With Optional Arguments
Defining and Calling Python Functions
Writing Beautiful Pythonic Code With PEP 8
Support the podcast & join our community of Pythonistas

Feb 25, 2022 • 59min
OAuth 2 and Authentication Choices for Your Python Project
Have you thought about what authentication system you want to use for your Python project? Should you use an existing Python library or a third-party service? This week on the show, Dan Moore is here to talk about authentication systems and OAuth 2.
Dan is the head of developer relations at FusionAuth. He shares advice about setting up an authentication system, setting up device grants, using social login, and addressing privacy issues. Dan also provides multiple resources to learn much more about the topic.
Course Spotlight: Using Google Login With Flask
In this course, you’ll create a Flask application that lets users sign in using their Google login. You’ll learn about OAuth 2 and OpenID Connect and also find out how to implement some code to handle user session management.
Topics:
00:00:00 – Introduction
00:01:58 – What is FusionAuth?
00:03:13 – What is the single-responsibility principle?
00:04:14 – Thinking about setting up an authentication system
00:08:42 – Background on OAuth
00:13:26 – Device grants
00:19:23 – Using another provider’s login and addressing privacy issues
00:28:39 – Video Course Spotlight
00:29:53 – Resources to learn more about privacy and identity
00:32:39 – Setting up an OAuth system
00:35:59 – DIY authentication pitfalls and hashing passwords
00:42:57 – Staying on top of updates and social engineering
00:51:29 – Resources for learning more about OAuth
00:54:30 – What are you excited about in the world of Python?
00:55:42 – What do you want to learn next?
00:56:49 – Final words and social connections
00:57:47 – Thanks and goodbye
Show Links:
FusionAuth - Auth. Built for Devs, By Devs
RFC 6749 - The OAuth 2.0 Authorization Framework
RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage
Single-responsibility principle - Wikipedia
oauthlib · PyPI
Final: OpenID Connect Core 1.0
International Association of Privacy Professionals
IDPro: Identity Professionals
Have I Been Pwned: Check if your email has been compromised in a data breach
Hash Functions | National Institute of Standards and Technology (NIST) - Computer Security Resource Center (CSRC)
Guides Overview - FusionAuth
The Modern Guide to OAuth - FusionAuth
Solving Identity Management in Modern Applications | SpringerLink
OAuth 2 in Action
Getting started — Django OAuth Toolkit 1.7.0 documentation
Flask-Login — Flask-Login 0.4.1 documentation
Adding social sign in to your Django web application using OAuth - FusionAuth
Create a Flask Application With Google Login – Real Python
Draft IETF - OAuth V2.1.04
Level up your Python skills with our expert-led courses:
Django View Authorization: Restricting Access
Using Google Login With Flask
Deploy Your Python Script on the Web With Flask
Support the podcast & join our community of Pythonistas

Feb 18, 2022 • 51min
Drawing Fractals With Python and Working With a Weather API
Have you been wanting to explore fractals and complex numbers in Python? Would you like to practice working with APIs in Python through a new project? This week on the show, Christopher Trudeau is here, and he’s taking on the task of curating new issues of PyCoder’s Weekly going forward. He’ll be joining me as a cohost every other week and bringing a fresh batch of PyCoder’s Weekly articles and projects.
We discuss a Real Python article about drawing the Mandelbrot set in Python. The tutorial guides you through creating fractal art using Matplotlib and Pillow. We also share a new step-by-step project building a weather-reporting command-line interface (CLI) app.
We cover several other articles and projects from the Python community, including a news roundup, a better Pygame main loop, ways to work with static and media files in Django, and a library for pleasing console output.
Course Spotlight: Make a 2D Side-Scroller Game With Pygame
In this step-by-step course, you’ll learn how to use Pygame. This library allows you to create games and rich multimedia programs in Python. You’ll learn how to draw items on your screen, implement collision detection, handle user input, and much more!
Topics:
00:00:00 – Introduction
00:02:15 – Black, the Python Code Formatter, Is Stable
00:04:07 – Apple Removes Python 2.7 in macOS Monterey 12.3
00:06:36 – GitHub Survey on Languages and More Developer Things
00:10:14 – CPython 3.11.0a5 Is Available
00:11:48 – Django Security Releases Issued: 4.0.2, 3.2.12, and 2.2.27
00:12:43 – A Better Pygame Main Loop
00:21:22 – Sponsor: CData Software
00:22:04 – Draw the Mandelbrot Set in Python
00:29:12 – The Fastest Way to Read a CSV in Pandas
00:35:16 – Video Course Spotlight
00:36:26 – Working With Static and Media Files in Django
00:41:42 – Raining Outside? Build a Weather CLI App With Python
00:48:15 – konsole: Readable, Pleasing Console Output
00:50:27 – Thanks and Goodbye
News:
Black, the Python Code Formatter, Is Stable – The popular Python autoformatter Black is finally non-beta software. Related discussion on Hacker News and Black’s stability policy doc.
Apple Removes Python 2.7 in macOS Monterey 12.3 – “Python 2.7 was removed from macOS in this update. Developers should use Python 3 or an alternative language instead.” Also see the related discussion on Hacker News.
GitHub Survey on Languages and More Developer Things – JavaScript retains the top spot, Python keeps second place gained in 2019 over Java, which holds in third. TypeScript continues fourth after racing up tenth in 2017 to fourth in 2020. JavaScript + TypeScript seem to put that way ahead in terms of amount of code on GitHub.
CPython 3.11.0a5 Is Available – “We needed to tame some angry buildbots, but after a small fight, we won with just some scratches! Here you have a shiny new alpha release: Python 3.11.0a5.”
Django Security Releases Issued: 4.0.2, 3.2.12, and 2.2.27 – Includes fixes for a possible XSS via debug template tag and a denial-of-service possibility in file uploads.
Articles:
A Better Pygame Main Loop – Improving your game’s main loop for smoother gameplay that takes less battery power: “Now your players’ laptops run cool while playing, and the graphics don’t have ugly tearing artifacts any more!”
Draw the Mandelbrot Set in Python – In this tutorial, you’ll visualize the famous Mandelbrot set using Python’s Matplotlib and Pillow libraries. You’ll learn how to draw the fractal in black and white, grayscale, and color.
The Fastest Way to Read a CSV in Pandas – This article covers pandas’ default CSV reading, the faster and more parallel CSV reader introduced in v1.4, and a different approach that can make things even faster.
Working With Static and Media Files in Django – A look at how to work with static and media files in a Django project, locally and in production.
Projects:
Raining Outside? Build a Weather CLI App With Python – In this tutorial, you’ll write a nicely formatted Python CLI app that displays information about the current weather in any city that you provide the name for.
konsole: Readable, Pleasing Console Output
Additional Links:
Make a 2D Side-Scroller Game With Pygame – Real Python
Using Pygame to Build an Asteroids Game in Python – Real Python
Deciphering Glyph :: Nice Animations with Twisted and PyGame
pygame 4000 book by pygame
Where’s your bottleneck? CPU time vs wallclock time
Storing Django Static and Media Files on Amazon S3 | TestDriven.io
OpenWeatherMap API guide - OpenWeatherMap
Level up your Python skills with our expert-led courses:
Using Pygame to Build an Asteroids Game in Python
Getting Started With Django: Building a Portfolio App
Make a 2D Side-Scroller Game With PyGame
Support the podcast & join our community of Pythonistas

Feb 11, 2022 • 50min
Improving Your Django and Python Developer Experience
How often have you thought about your Developer Experience (DX)? How do you improve your workflow, find documentation, and simplify code formatting? This week on the show, Adam Johnson is here to talk about his new book, “Boost Your Django DX.”
Adam provides advice on improving your developer experience, specifically inside Django and within Python. We discuss tools to simplify code formatting and linting.
Adam shares a couple of his own Django tools designed to simplify development and keep your projects updated. He also covers documentation resources for finding answers quickly.
Course Spotlight: Django View Authorization: Restricting Access
This course covers how to restrict your web pages to users with different roles through Django view authorization. You’ll learn about HttpRequest.user objects, decorators that authenticate views, and ways to notify your users with the Django messages framework.
Topics:
00:00:00 – Introduction
00:01:53 – The Django Project Technical Board
00:04:08 – Change in the release cadence for Django
00:06:08 – Kaizen, continous improvement, and helping others improve
00:10:23 – Common ways to improve developer experience
00:14:06 – Sponsor: Scout APM
00:14:54 – Developer documentation tools
00:20:24 – Bang shortcuts when searching with DuckDuckGo
00:22:37 – Who is the intended audience for the book?
00:23:33 – Managing secrets and giving general advice
00:26:49 – Writing books to fill in the gaps
00:29:12 – Video Course Spotlight
00:30:24 – Topics for the blog, favicons, and type hints
00:39:22 – What are your recent Django-related projects?
00:42:05 – Sources for Django news
00:45:01 – What are you excited about in the world of Python?
00:45:59 – What do you want to learn next?
00:47:43 – Shout-outs and social connections
00:48:43 – Thanks and goodbye
Show Links:
Adam Johnson’s Home Page
Boost Your Django DX
“Boost Your Django DX” Released - Adam Johnson
Django Software Foundation | Django
Kaizen - Wikipedia
black: The Uncompromising Code Formatter · PyPI
isort: isort your imports, so you don’t have to.
Flake8: Your Tool For Style Guide Enforcement — flake8 4.0.1 documentation
DevDocs API Documentation
DuckDuckGo !Bang
Django Chat | Adam Johnson - Boost Your Django DX
Podcast.__init__ - Improve Your Productivity By Investing In Developer Experience
How to Add a Favicon to Your Django Site - Adam Johnson
Favicon Generator for perfect icons on all browsers
Introducing django-browser-reload: Automatically Reload Your Browser in Development - Adam Johnson
django-browser-reload · PyPI
django-upgrade · PyPI
pyupgrade · PyPI
Django News
Learn more about Ableton Push | Ableton
Level up your Python skills with our expert-led courses:
Django View Authorization: Restricting Access
Host Your Django Project on Heroku
How to Set Up a Django Project
Support the podcast & join our community of Pythonistas

Feb 4, 2022 • 59min
Manipulating and Analyzing Audio in Python
Would you like to experiment with analyzing or manipulating audio with Python? This week on the show, we have Braden Riggs from DolbyIO to discuss extracting audio features and Python libraries for reshaping audio. Braden shares techniques from his recent talk at PyData Global, “Unlocking More From Your Audio Data!”
We share several articles, tutorials, and Python libraries to get you started working with audio. We begin with a quick introduction to audio digitization and feature extraction. After discussing modifying audio files, we share tools and techniques for exploring audio analysis through data science.
Braden talks about speech-to-text conversion, sentiment analysis, and Natural Language Toolkit (NLTK). He also shares a valuable collection of audio technology resources for developers.
Course Spotlight: Playing and Recording Sound in Python
In this course, you’ll learn about libraries that can be used for playing and recording sound in Python, such as PyAudio and python-sounddevice. You’ll also see code snippets for playing and recording sound files and arrays, as well as for converting between different sound file formats.
Topics:
00:00:00 – Introduction
00:02:46 – What is Dolby IO?
00:05:08 – Audio and data science background
00:08:17 – Digital audio basics
00:12:07 – Audio feature extraction
00:18:31 – Sponsor: Snyk - The Big Fix
00:19:17 – PyAudioAnalysis and processing audio files with Python
00:26:16 – Feature extraction and audio analysis talk at PyData Global
00:32:33 – Jupyter notebook of presentation and DolbyIO awesome audio list
00:34:13 – librosa - package for music analysis
00:37:55 – Video Course Spotlight
00:39:11 – Speech to text and NLTK
00:54:28 – What are you excited about in the world of Python?
00:55:49 – What do you want to learn next?
00:56:53 – Shout outs and social connections
00:58:04 – Thanks and goodbye
Show Links:
Dolby.io - High-fidelity Audio and Video For All
Digital Audio Basics: Audio Sample Rate and Bit Depth
Audio Feature Extraction
pyAudioAnalysis Wiki
Audio Handling Basics: Process Audio Files In Command-Line or Python | HackerNoon
pydub: Manipulate audio with a simple and easy high level interface
FFmpeg: Complete, cross-platform solution to record, convert and stream audio and video
Improving Automated Ad Insertion with Audio Analysis at PyData Global 2021 - Dolby.io
Demo notebooks presented at PyData Global 2021 for “Unlocking more from your audio data”
librosa: Python package for music and audio analysis
NLTK: The Natural Language Toolkit Documentation
Natural Language Processing With Python’s NLTK Package – Real Python
DolbyIO/awesome-audio: A curated list of awesome audio technology resources for developers
PyConDE & PyData Berlin 2022 | PyCon.DE & PyData Berlin, 2022
Vue.js
Flutter - Build apps for any screen
Level up your Python skills with our expert-led courses:
Learn Text Classification With Python and Keras
The pandas DataFrame: Working With Data Efficiently
Playing and Recording Sound in Python
Support the podcast & join our community of Pythonistas

Jan 28, 2022 • 1h 7min
What Is a JIT and How Can Pyjion Speed Up Your Python?
How can you can speed up Python? Have you thought of using a JIT (Just-In-Time Compiler)? This week on the show, we have Real Python author and previous guest Anthony Shaw to talk about his project Pyjion, a drop-in JIT compiler for CPython 3.10.
Anthony has been working on Pyjion over the past year and recently released version 1.0. He talks about how he took over the project from Brett Cannon and Dino Viehland. He covers the background on compilers and assembly that he needed to take on this project.
We discuss where a tool like this can speed up your Python code, and we consider alternative solutions. We also talk about his desire to make the project as deeply compatible with Python code as possible.
Anthony talks about how his dive into writing the CPython Internals book led him into the project. We talk about what type of developer would benefit from exploring the book.
We also cover his recent Real Python article, titled “Advanced Visual Studio Code for Python Developers.” It’s an excellent resource that VS Code users should bookmark to revisit as they grow with the tool.
Spotlight: CPython Internals Book: Your Guided Tour Through the Python 3 Interpreter
Unlock the inner workings of the Python language, compile the Python interpreter from source code, and participate in the development of CPython.
Topics:
00:00:00 – Introduction
00:02:15 – Cloud Developer Advocate at Microsoft
00:04:57 – Pyjion, a drop-in JIT compiler for CPython
00:07:52 – PyCon 2020 & 2021 talks and wanting to take on the project
00:12:46 – How Pyjion uses .NET 6
00:17:32 – Trying out Pyjion functionality online
00:21:43 – Sponsor: Honeybadger
00:22:28 – Portability of projects using Pyjion
00:29:55 – Focus on compatibility with Python code
00:33:07 – Choosing to make it based on Python 3.10
00:37:45 – What would be prerequisites to work on the project?
00:40:40 – Other ways to help with project
00:44:34 – CPython Internals: Who is the book for?
00:49:46 – What resources do you need to work through the book?
00:52:04 – Spotlight: CPython Internals Book
00:53:21 – Do you use an IDE or code editor?
00:56:12 – Why did you decide to write the book?
00:57:12 – Advanced Visual Studio Code for Python Developers
01:03:20 – What are you excited about in the world of Python?
01:04:03 – What do you want to learn next?
01:05:33 – Thanks and goodbye
Show Links:
Pyjion - A JIT for Python based upon CoreCLR
Pyjion main documentation
live.trypyjion.com
Anthony Shaw - Why is Python slow? - YouTube
Restarting Pyjion, a general purpose JIT for Python- is it worth it? - YouTube
Common Language Runtime (CLR) overview - .NET | Microsoft Docs
Writing Python Extensions in Assembly
Beginning x64 Assembly Programming | SpringerLink
Pyston | Python Performance
PyPy
facebookincubator/cinder: Instagram’s performance oriented fork of CPython.
Welcome to Hypothesis! — Hypothesis 6.36.0 documentation
CPython Internals Book – Real Python
Advanced Visual Studio Code for Python Developers – Real Python
vscode-pets: Adds playful pets 🦀🐱🐶 in your VS Code window
What’s New In Python 3.11 — Python 3.11.0a4 documentation
Compilers: Principles, Techniques, and Tools (Dragon Book)
Level up your Python skills with our expert-led courses:
Finding the Perfect Python Code Editor
Debugging in Python With pdb
Looping With Python enumerate()
Support the podcast & join our community of Pythonistas

Jan 21, 2022 • 59min
Designing for Users and Building a Social Network With Django
Are you looking for a project to practice your Django skills? Designing the fundamental interactions of a social network is an instructive way to explore models and relationships while learning advanced Django skills. This week on the show, we talk with previous guest Martin Breuss about his new four-part series, “Build a Social Network With Django”.
Martin talks about the design process and ways to include user-focused features. He shares a handy CSS library to make your front end look modern with minimal effort.
We digress into a discussion of personal vs professional use of social networks. We also talk about the additional Real Python resources to help you build out the rest of your project.
Course Spotlight: How to Set Up a Django Project
In this course, you’ll learn the necessary steps that you’ll need to take to set up a new Django project. You’ll learn the basic setup for any new Django project, which needs to happen before programming the specific functionality of your project.
Topics:
00:00:00 – Introduction
00:01:46 – Build a Social Network with Django series
00:04:05 – Setting project scope and constraints
00:09:09 – Why use Django for this project?
00:12:23 – Learning through errors
00:15:29 – Sponsor: Honeybadger
00:16:14 – Models and relationships
00:19:05 – Implementing a post-save hook
00:23:17 – Django front end with the Bulma CSS framework
00:28:42 – Templates and profile pages
00:31:03 – Following, posts, and thoughts on user-centric features
00:37:18 – Personal and professional use of social media
00:48:03 – Setting up redirects
00:49:08 – Video Course Spotlight
00:50:19 – Additional Real Python resources for Django, including a Learning Path
00:53:07 – What would you add if this were a portfolio project?
00:54:14 – What are you excited about in the world of Python?
00:56:36 – What do you want to learn next?
00:57:54 – Thanks and goodbye
Show Links:
Build a Social Network With Django – Part 1 – Real Python
Build a Django Front End With Bulma – Part 2 – Real Python
Build and Handle POST Requests in Django – Part 3 – Real Python
Build and Submit HTML Forms With Django – Part 4 – Real Python
Django for Web Development (Learning Path) – Real Python
Episode #87: Building a Content Aggregator and Working With RSS in Python – The Real Python Podcast
Episode #4: Learning Python Through Errors – The Real Python Podcast
The Flask Mega-Tutorial Part I: Hello, World! - miguelgrinberg.com
Bulma: Free, open source, and modern CSS framework based on Flexbox
Writing your first Django app, part 1 | Django documentation
Get Started With Django Part 1: Build a Portfolio App – Real Python
Get Started With Django Part 2: Django User Management – Real Python
Tweetbot 6 for iOS
300-page iPhone bill - Wikipedia
ArcGIS API for Python | ArcGIS Developer
Level up your Python skills with our expert-led courses:
Getting Started With Django: Building a Portfolio App
Host Your Django Project on Heroku
How to Set Up a Django Project
Support the podcast & join our community of Pythonistas

Jan 14, 2022 • 51min
Launching Python, Virtual Environments, and Locking Dependencies With Brett Cannon
Would you like a simple command to launch your Python programs using the newest version of the language installed on your machine? This week on the show, we continue our conversation with Brett Cannon. Brett discusses his project, the Python Launcher for Unix.
We dive into Brett’s workflow to set up projects, virtual environments, and prepare for distribution. He shares some of the tools he employs and reasons for keeping things simple.
We also talk about PEP 665, which specifies a file format to list an application’s Python package installation requirements. Brett shares why he co-authored the PEP and a bit of the community’s reaction. It leads to a deeper conversation about going beyond ‘requirements.txt’ to lock files.
Course Spotlight: Data Visualization Interfaces in Python With Dash
In this course, you’ll learn how to build a dashboard using Python and Dash. Dash is a framework for building data visualization interfaces. It helps data scientists build fully interactive web applications quickly.
Topics:
00:00:00 – Introduction
00:01:43 – Python Launcher for Unix
00:09:36 – Hiding a virtual environment directory
00:13:30 – Sponsor: Scout APM
00:14:17 – Environment managers and being an editor vs an IDE person
00:17:32 – PEP 665, lock files, and Brett’s dependency workflow
00:20:56 – The hurdles of source distributions and version control repositories
00:25:07 – Drawbacks of requirements files and standardizing lock files
00:28:19 – Why PEP 665 is controversial and the changes to setuptools
00:33:48 – Video Course Spotlight
00:35:16 – Are these examples of growing pains?
00:37:51 – Unfair comparisons to packaging in Rust or other languages
00:42:35 – What are you excited about in the world of Python?
00:43:54 – What do you want to learn next?
00:49:23 – Thanks and goodbye
Show Links:
Introducing the Python Launcher for Unix
brettcannon/python-launcher: Python launcher for Unix
Python Extension for VSCode
Why use Flit? — Flit 3.5.1 documentation
pip-tools: A set of tools to keep your pinned Python dependencies fresh.
PEP 665 – A file format to list Python dependencies for reproducibility of an application | Python.org
venv — Creation of virtual environments — Python 3.10.1 documentation
virtualenvwrapper · PyPI
pdm - Python Development Master · PyPI
pyflow - Streamlines working with Python projects and files · PyPI
pipenv · PyPI
Thoughts on where tools fit into a workflow
What to do when you botch a release on PyPI
Python Virtual Environments: A Primer – Real Python
Why you shouldn’t invoke setup.py directly | Paul Ganssle
python-wasm: Build scripts and configuration for building CPython for Emscripten
Pyodide — A Python distribution for the browser and Node.js based on WebAssembly
WebAssembly
Programming Rust, 2nd Edition
Brett Cannon on Twitter: “PEP 665 got rejected today 😞”
Level up your Python skills with our expert-led courses:
A Beginner's Guide to pip
Data Visualization Interfaces in Python With Dash
Working With Pipenv
Support the podcast & join our community of Pythonistas

Jan 7, 2022 • 59min
Continuing to Unravel Python's Syntactic Sugar With Brett Cannon
A year ago, we had Brett Cannon on the show to discuss his blog series about unravelling Python’s syntactic sugar. Brett has written 15 more entries in the series, and he returns to the show this week to continue our conversation. We dive into unravelling ‘async’ and ‘await’ statements and their relationship with Python’s generators.
While working through the series, he has uncovered some issues lying under the surface of CPython. We discuss a couple of these discoveries and how the core developers resolved them.
Brett was recently re-elected to the Python Steering Council, and he talks about how the current direction of the council is shifting. We also discuss how Brett uses Twitter polls to gauge community sentiment and factors it into development decisions.
This conversation covered so many topics that we split it into two episodes. Next week’s episode will continue our discussion.
Course Spotlight: Speed Up Python With Concurrency
Learn what concurrency means in Python and why you might want to use it. You’ll see a simple, non-concurrent approach and then look into why you’d want threading, asyncio, or multiprocessing.
Topics:
00:00:00 – Introduction
00:01:54 – Python Steering Council Reelection
00:06:06 – Python Extension for VSCode and the Language Server Protocol (LSP)
00:10:38 – Using twitter polls to gauge sentiment
00:19:19 – Sponsor: Honeybadger
00:20:04 – Unravelling Python’s syntactic sugar series
00:25:30 – The desugar GitHub repo and unearthing problems in CPython
00:29:48 – Why have __iter__() for an iterator?
00:32:47 – Is discovering and showcasing these “issues” stressful?
00:35:19 – A reverse chronology of some Python features
00:38:34 – How the heck does async/await work in Python
00:51:29 – Video Course Spotlight
00:52:54 – Using “spam” vs “foo” and metasyntactic variables
00:57:30 – Goodbye
Show Links:
2022 Python Steering Council Election Results - Python.org
Official Page for Language Server Protocol
Brett Cannon on Twitter: “If I were creating a protocol/interface for a spammy object, what naming convention would you expect?”
Episode #88: Discussing Type Hints, Protocols, and Ducks in Python – The Real Python Podcast
Brett Cannon - Twitter Poll: “Which of these ‘pip install’ flags to you usually specify?”
Episode #47: Unraveling Python’s Syntax to Its Core With Brett Cannon – The Real Python Podcast
Unravelling ‘break’ and ‘continue’
Unravelling ‘for’ statements
GitHub - brettcannon/desugar: Unravelling Python source code
A reverse chronology of some Python features
What Color is Your Function? – journal.stuffwithstuff.com
Unravelling ‘async’ and ‘await’
How the heck does async/await work in Python 3.5?
Episode #39: Generators, Coroutines, and Learning Python Through Exercises – The Real Python Podcast
How to Use Generators and yield in Python – Real Python
Async IO in Python: A Complete Walkthrough – Real Python
Level up your Python skills with our expert-led courses:
For Loops in Python (Definite Iteration)
Python Generators 101
Speed Up Python With Concurrency
Support the podcast & join our community of Pythonistas