Powered by RND
PodcastsNieuwsPython Bytes

Python Bytes

Michael Kennedy and Brian Okken
Python Bytes
Nieuwste aflevering

Beschikbare afleveringen

5 van 32
  • #455 Gilded Python and Beyond
    Topics covered in this episode: Cyclopts: A CLI library * The future of Python web services looks GIL-free* * Free-threaded GC* * Polite lazy imports for Python package maintainers* Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @[email protected] / @mkennedy.codes (bsky) Brian: @[email protected] / @brianokken.bsky.social Show: @[email protected] / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Michael #1: Cyclopts: A CLI library A CLI library that fixes 13 annoying issues in Typer Much of Cyclopts was inspired by the excellent Typer library. Despite its popularity, Typer has some traits that I (and others) find less than ideal. Part of this stems from Typer's age, with its first release in late 2019, soon after Python 3.8's release. Because of this, most of its API was initially designed around assigning proxy default values to function parameters. This made the decorated command functions difficult to use outside of Typer. With the introduction of <code>Annotated</code> in python3.9, type-hints were able to be directly annotated, allowing for the removal of these proxy defaults. The 13: Argument vs Option Positional or Keyword Arguments Choices Default Command Docstring Parsing Decorator Parentheses Optional Lists Keyword Multiple Values Flag Negation Help Defaults Validation Union/Optional Support Adding a Version Flag Documentation Brian #2: The future of Python web services looks GIL-free Giovanni Barillari “Python 3.14 was released at the beginning of the month. This release was particularly interesting to me because of the improvements on the "free-threaded" variant of the interpreter. Specifically, the two major changes when compared to the free-threaded variant of Python 3.13 are: Free-threaded support now reached phase II, meaning it's no longer considered experimental The implementation is now completed, meaning that the workarounds introduced in Python 3.13 to make code sound without the GIL are now gone, and the free-threaded implementation now uses the adaptive interpreter as the GIL enabled variant. These facts, plus additional optimizations make the performance penalty now way better, moving from a 35% penalty to a 5-10% difference.” Lots of benchmark data, both ASGI and WSGI Lots of great thoughts in the “Final Thoughts” section, including “On asynchronous protocols like ASGI, despite the fact the concurrency model doesn't change that much – we shift from one event loop per process, to one event loop per thread – just the fact we no longer need to scale memory allocations just to use more CPU is a massive improvement. ” “… for everybody out there coding a web application in Python: simplifying the concurrency paradigms and the deployment process of such applications is a good thing.” “… to me the future of Python web services looks GIL-free.” Michael #3: Free-threaded GC The free-threaded build of Python uses a different garbage collector implementation than the default GIL-enabled build. The Default GC: In the standard CPython build, every object that supports garbage collection (like lists or dictionaries) is part of a per-interpreter, doubly-linked list. The list pointers are contained in a PyGC_Head structure. The Free-Threaded GC: Takes a different approach. It scraps the PyGC_Head structure and the linked list entirely. Instead, it allocates these objects from a special memory heap managed by the "mimalloc" library. This allows the GC to find and iterate over all collectible objects using mimalloc's data structures, without needing to link them together manually. The free-threaded GC does NOT support "generations” By marking all objects reachable from these known roots, we can identify a large set of objects that are definitely alive and exclude them from the more expensive cycle-finding part of the GC process. Overall speedup of the free-threaded GC collection is between 2 and 12 times faster than the 3.13 version. Brian #4: Polite lazy imports for Python package maintainers Will McGugan commented on a LI post by Bob Belderbos regarding lazy importing “I'm excited about this PEP. I wrote a lazy loading mechanism for Textual's widgets. Without it, the entire widget library would be imported even if you needed just one widget. Having this as a core language feature would make me very happy.” https://github.com/Textualize/textual/blob/main/src/textual/widgets/__init__.py Well, I was excited about Will’s example for how to, essentially, allow users of your package to import only the part they need, when they need it. So I wrote up my thoughts and an explainer for how this works. Special thanks to Trey Hunner’s Every dunder method in Python, which I referenced to understand the difference between __getattr__() and __getattribute__(). Extras Brian: Started writing a book on Test Driven Development. Should have an announcement in a week or so. I want to give folks access while I’m writing it, so I’ll be opening it up for early access as soon as I have 2-3 chapters ready to review. Sign up for the pythontest newsletter if you’d like to be informed right away when it’s ready. Or stay tuned here. Michael: New course!!! Agentic AI Programming for Python I’ll be on Vanishing Gradients as a guest talking book + ai for data scientists OpenAI launches ChatGPT Atlas https://github.com/jamesabel/ismain by James Abel Pets in PyCharm Joke: You're absolutely right
    --------  
    38:53
  • #454 It's some form of Elvish
    Topics covered in this episode: * djrest2 -* A small and simple REST library for Django based on class-based views. Github CLI caniscrape - Know before you scrape. Analyze any website's anti-bot protections in seconds. * 🐴 GittyUp* Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @[email protected] / @mkennedy.codes (bsky) Brian: @[email protected] / @brianokken.bsky.social Show: @[email protected] / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Brian #1: djrest2 - A small and simple REST library for Django based on class-based views. Emma Levit Based on an interesting blog post Why, in 2025, do we still need a 3rd party app to write a REST API with Django? As opposed to using DRF or Django Ninja - Michael #2: Github CLI GitHub’s official command line tool Features Checking out a pull request locally You can clone any repository using OWNER/REPO syntax: gh repo clone cli/cli Create a pull request interactively: gh pr create See all at cli.github.com/manual/examples Brian #3: caniscrape - Know before you scrape. Analyze any website's anti-bot protections in seconds. reddit announcement and discussion caniscrape checks a website for common anti-bot mechanisms and reports: A difficulty score (0–10) Which protections are active (e.g., Cloudflare, Akamai, hCaptcha, etc.) What tools you’ll likely need (headless browsers, proxies, CAPTCHA solvers, etc.) Whether using a scraping API might be better This helps you decide the right scraping approach before you waste time building a bot that keeps getting blocked. Michael #4: 🐴 GittyUp Never forget to pull again: Automatically discover and update all your Git repositories with one command. Built initially to solve this problem Rebuilt and published last week as part of my upcoming Agentic AI Programming for Python course. Get notified this week at training.talkpython.fm/getnotified Update everything in a folder tree with gittyup Review changes, blockers, etc with gittyup --explain Extras Brian: Three times faster with lazy imports - Hugo van Kemenade Interesting discussion on Hugo’s post - on Mastodon Use lazy module imports now - Graham Dumpleton Graham’s post uses wrapt, a “module for decorators, wrappers and monkey patching”, to simulate lazy imports Helpful comment from Adam Johnson on Graham’s post to actually do the import during type checking using if TYPE_CHECKING: import ... Michael: uvloop is back! pypi+ listened. :) https://www.reddit.com/r/Python/comments/1o9dey5/i_just_released_pypipluscom_20_offlineready/ Feedback from my “Show me your ls” post. Joke: Some form of Elvish
    --------  
    29:07
  • #453 Python++
    Topics covered in this episode: * PyPI+* * uv-ship - a CLI-tool for shipping with uv* * How fast is 3.14?* * air - a new web framework built with FastAPI, Starlette, and Pydantic.* Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @[email protected] / @mkennedy.codes (bsky) Brian: @[email protected] / @brianokken.bsky.social Show: @[email protected] / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Michael #1: PyPI+ Very nice search and exploration tool for PyPI Minor but annoying bug: content-types ≠ content_types on PyPI+ but they are in Python itself. Minimum Python version seems to be interpreted as max Python version. See dependency graphs and more Examples content-types jinja-partials fastapi-chameleon Brian #2: uv-ship - a CLI-tool for shipping with uv “uv-ship is a lightweight companion to uv that removes the risky parts of cutting a release. It verifies the repo state, bumps your project metadata and optionally refreshes the changelog. It then commits, tags & pushes the result, while giving you the chance to review every step.” Michael #3: How fast is 3.14? by Miguel Grinberg A big focus on threaded vs. non-threaded Python Some times its faster, other times, it’s slower Brian #4: air - a new web framework built with FastAPI, Starlette, and Pydantic. An very new project in Alpha stage by Daniel & Audrey Felderoy, the “Two Scoops of Django” people. Air Tags are an interesting thing. Also Why? is amazing “Don't use AIR” “Every release could break your code! If you have to ask why you should use it, it's probably not for you.” “If you want to use Air, you can. But we don't recommend it.” “It'll likely infect you, your family, and your codebase with an evil web framework mind virus, , …” Extras Brian: Python 3.15a1 is available uv python install 3.15 already works Python lazy imports you can use today - one of two blog posts I threatened to write recently Testing against Python 3.14 - the other one Free Threading has some trove classifiers Michael: Blog post about the book: Talk Python in Production book is out! In particular, the extras are interesting. AI Usage TUI Show me your ls Helium Browser is interesting. But also has Python as a big role. GitHub says Languages Python 97.4% 👀 Shell 1.9% Other 0.7% Smallest Python release? 3.13.9 Joke: An unforgivable crime
    --------  
    36:17
  • #452 pi py-day (or is it py pi-day?)
    Topics covered in this episode: * Python 3.14* * Free-threaded Python Library Compatibility Checker* * Claude Sonnet 4.5* * Python 3.15 will get Explicit lazy imports* Extras Joke Watch on YouTube About the show Sponsored by DigitalOcean: pythonbytes.fm/digitalocean-gen-ai Use code DO4BYTES and get $200 in free credit Connect with the hosts Michael: @[email protected] / @mkennedy.codes (bsky) Brian: @[email protected] / @brianokken.bsky.social Show: @[email protected] / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Brian #1: Python 3.14 Released on Oct 7 What’s new in Python 3.14 Just a few of the changes PEP 750: Template string literals PEP 758: Allow except and except* expressions without brackets Improved error messages Default interactive shell now highlights Python syntax supports auto-completion argparse better support for python -m module has a new suggest_on_error parameter for “maybe you meant …” support python -m calendar now highlights today’s date Plus so much more Michael #2: Free-threaded Python Library Compatibility Checker by Donghee Na App checks compatibility of top PyPI libraries with CPython 3.13t and 3.14t, helping developers understand how the Python ecosystem adapts to upcoming Python versions. It’s still pretty red, let’s get in the game everyone! Michael #3: Claude Sonnet 4.5 Top programming model (even above Opus 4.1) Shows large improvements in reducing concerning behaviors like sycophancy, deception, power-seeking, and the tendency to encourage delusional thinking Anthropic is releasing the Claude Agent SDK, the same infrastructure that powers Claude Code, making it available for developers to build their own agents, along with major upgrades including checkpoints, a VS Code extension, and new context editing features And Claude Sonnet 4.5 is available in PyCharm too. Brian #4: Python 3.15 will get Explicit lazy imports Discussion on discuss.python.org This PEP introduces syntax for lazy imports as an explicit language feature: lazy import json lazy from json import dumps BTW, lazy loading in fixtures is a super easy way to speed up test startup times. Extras Brian: Music video made in Python - from Patrick of the band “Friends in Real Life” source code: https://gitlab.com/low-capacity-music/r9-legends/ Michael: New article: Thanks AI Lots of updates for content-types Dramatically improved search on Python Bytes (example: https://pythonbytes.fm/search?q=wheel use the filter toggle to see top hits) Talk Python in Production is out and for sale Joke: You do estimates?
    --------  
    40:36
  • #451 Databases are a Fad
    Topics covered in this episode: * PostgreSQL 18 Released* * Testing is better than DSA (Data Structures and Algorithms)* * Pyrefly in Cursor/PyCharm/VSCode/etc* * Playwright & pytest techniques that bring me joy* Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @[email protected] / @mkennedy.codes (bsky) Brian: @[email protected] / @brianokken.bsky.social Show: @[email protected] / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Michael #1: PostgreSQL 18 Released PostgreSQL 18 is out (Sep 25, 2025) with a focus on faster text handling, async I/O, and easier upgrades. New async I/O subsystem speeds sequential scans, bitmap heap scans, and vacuum by issuing concurrent reads instead of blocking on each request. Major-version upgrades are smoother: pg_upgrade retains planner stats, adds parallel checks via -jobs, and supports faster cutovers with -swap. Smarter query performance lands with skip scans on multicolumn B-tree indexes, better OR optimization, incremental-sort merge joins, and parallel GIN index builds. Dev quality-of-life: virtual generated columns enabled by default, a uuidv7() generator for time-ordered IDs, and RETURNING can expose both OLD and NEW. Security gets an upgrade with native OAuth 2.0 authentication; MD5 password auth is deprecated and TLS controls expand. Text operations get a boost via the new PG_UNICODE_FAST collation, faster upper/lower, a casefold() helper, and clearer collation behavior for LIKE/FTS. Brian #2: Testing is better than DSA (Data Structures and Algorithms) Ned Batchelder If you need to grind through DSA problems to get your first job, then of course, do that, but if you want to prepare yourself for a career, and also stand out in job interviews, learn how to write tests. Testing is a skill you’ll use constantly, will make you stand out in job interviews, and isn’t taught well in school (usually). Testing code well is not obvious. It’s a puzzle and a problem to solve. It gives you confidence and helps you write better code. Applies everywhere, at all levels. Notes from Brian Most devs suck at testing, so being good at it helps you stand out very quickly. Thinking about a system and how to test it often very quickly shines a spotlight on problem areas, parts with not enough specification, and fuzzy requirements. This is a good thing, and bringing up these topics helps you to become a super valuable team member. High level tests need to be understood by key engineers on a project. Even if tons of the code is AI generated. Even if many of the tests are, the people understanding the requirements and the high level tests are quite valuable. Michael #3: Pyrefly in Cursor/PyCharm/VSCode/etc Install the VSCode/Cursor extension or PyCharm plugin, see https://pyrefly.org/en/docs/IDE/ Brian spoke about Pyrefly in #433: Dev in the Arena I’ve subsequently had the team on Talk Python: #523: Pyrefly: Fast, IDE-friendly typing for Python (podcast version coming in a few weeks, see video for now.) My experience has been Pyrefly changes the feel of the editor, give it a try. But disable the regular language server extension. Brian #4: Playwright & pytest techniques that bring me joy Tim Shilling “I’ve been working with playwright more often to do end to end tests. As a project grows to do more with HTMX and Alpine in the markup, there’s less unit and integration test coverage and a greater need for end to end tests.” Tim covers some cool E2E techniques Open new pages / tabs to be tested Using a pytest marker to identify playwright tests Using a pytest marker in place of fixtures Using page.pause() and Playwright’s debugging tool Using assert_axe_violations to prevent accessibility regressions Using page.expect_response() to confirm a background request occurred From Brian Again, with more and more lower level code being generated, and many unit tests being generated (shakes head in sadness), there’s an increased need for high level tests. Don’t forget API tests, obviously, but if there’s a web interface, it’s gotta be tested. Especially if the primary user experience is the web interface, building your Playwright testing chops helps you stand out and let’s you test a whole lot of your system with not very many tests. Extras Brian: Big O - By Sam Who Python 3.14.0rc3 has been available since Sept 18. Python 3.14.0 final scheduled for Oct 7 Django 6.0 alpha 1 released Django 6.0 final scheduled for Dec 3 Python Test Static hosting update Joke: Always be backing up
    --------  
    23:54

Meer Nieuws podcasts

Over Python Bytes

Python Bytes is a weekly podcast hosted by Michael Kennedy and Brian Okken. The show is a short discussion on the headlines and noteworthy news in the Python, developer, and data science space.
Podcast website

Luister naar Python Bytes, Boekestijn en De Wijk en vele andere podcasts van over de hele wereld met de radio.net-app

Ontvang de gratis radio.net app

  • Zenders en podcasts om te bookmarken
  • Streamen via Wi-Fi of Bluetooth
  • Ondersteunt Carplay & Android Auto
  • Veel andere app-functies
Social
v7.23.10 | © 2007-2025 radio.de GmbH
Generated: 10/28/2025 - 3:21:16 PM