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.
We know you're busy. Not everyone has time to scour social media platforms like Reddit or Twitter for Python developer news. When you subscribe, Python Bytes delivers easily-digestible headlines directly to you. Our weekly episodes bring you byte-sized chunks of tech news curated specifically for our discerning listeners. If you want a leg-up in the data and developing world, Python Bytes is a must-listen!
Michael Kennedy and Brian Okken
talk python, programming, brian, michael, news, community, show, world, thank, love, guys, great, work, always.
Listeners of Python Bytes that love the show mention:The Python Bytes podcast is a must-listen for any Python developer or enthusiast looking to stay up-to-date with the latest news and developments in the Python community. Hosted by Michael Kennedy and Brian Okken, this podcast delivers informative and inspirational discussions on all things Python. With a mix of topics, guests, and show-notes, this podcast covers everything you need to know to enhance your productivity and learning.
One of the best aspects of The Python Bytes podcast is its ability to provide a wide range of information in a concise format. Each episode features a quick rundown of news items, allowing listeners to quickly get up to speed on what's happening in the Python world. The show-notes also provide links to further explore the topics discussed, making it easy to dive deeper into areas that interest you. Additionally, the hosts bring on guests who share their expertise and insights on specific topics, adding depth and variety to each episode.
Another highlight of this podcast is the passion and enthusiasm displayed by the hosts. Michael Kennedy and Brian Okken are genuine "pythonistas" who clearly love what they do. Their enthusiasm is contagious and makes listening to each episode enjoyable and engaging. Whether you are a beginner or an experienced programmer, their friendly manner and deep knowledge create a welcoming atmosphere that encourages learning.
While there are many positives about The Python Bytes podcast, one possible drawback is that some episodes may be too technical for absolute beginners or those with minimal programming experience. However, even for those without an extensive background in Python, there is still plenty of valuable information to take away from each episode. Additionally, the show-notes provide an opportunity for further exploration at your own pace.
In conclusion, The Python Bytes podcast is an invaluable resource for anyone interested in Python. It provides a comprehensive overview of the latest news and developments in the Python community while offering insightful discussions with industry experts. Michael Kennedy and Brian Okken's passion for Python shines through each episode, making this podcast both informative and enjoyable to listen to. Whether you are an experienced Python developer or a beginner looking to learn more, this podcast is a must-listen.
Topics covered in this episode: Making PyPI's test suite 81% faster People aren't talking enough about how most of OpenAI's tech stack runs on Python PyCon Talks on YouTube Optimizing Python Import Performance Extras Joke Watch on YouTube About the show Sponsored by Digital Ocean: pythonbytes.fm/digitalocean-gen-ai Use code DO4BYTES and get $200 in free credit Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: Making PyPI's test suite 81% faster Alexis Challande The PyPI backend is a project called Warehouse It's tested with pytest, and it's a large project, thousands of tests. Steps for speedup Parallelizing test execution with pytest-xdist 67% time reduction --numprocesses=auto allows for using all cores DB isolation - cool example of how to config postgress to give each test worker it's on db They used pytest-sugar to help with visualization, as xdist defaults to quite terse output Use Python 3.12's sys.monitoring to speed up coverage instrumentation 53% time reduction Nice example of using COVERAGE_CORE=sysmon Optimize test discovery Always use testpaths Sped up collection time. 66% reduction (collection was 10% of time) Not a huge savings, but it's 1 line of config Eliminate unnecessary imports Use python -X importtime Examine dependencies not used in testing. Their example: ddtrace A tool they use in production, but it also has a couple pytest plugins included Those plugins caused ddtrace to get imported Using -p:no ddtrace turns off the plugin bits Notes from Brian: I often get questions about if pytest is useful for large projects. Short answer: Yes! Longer answer: But you'll probably want to speed it up I need to extend this article with a general purpose “speeding up pytest” post or series. -p:no can also be used to turn off any plugin, even builtin ones. Examples include nice to have developer focused pytest plugins that may not be necessary in CI CI reporting plugins that aren't needed by devs running tests locally Michael #2: People aren't talking enough about how most of OpenAI's tech stack runs on Python Original article: Building, launching, and scaling ChatGPT Images Tech stack: The technology choices behind the product are surprisingly simple; dare I say, pragmatic! Python: most of the product's code is written in this language. FastAPI: the Python framework used for building APIs quickly, using standard Python type hints. As the name suggests, FastAPI's strength is that it takes less effort to create functional, production-ready APIs to be consumed by other services. C: for parts of the code that need to be highly optimized, the team uses the lower-level C programming language Temporal: used for asynchronous workflows and operations inside OpenAI. Temporal is a neat workflow solution that makes multi-step workflows reliable even when individual steps crash, without much effort by developers. It's particularly useful for longer-running workflows like image generation at scale Michael #3: PyCon Talks on YouTube Some talks that jumped out to me: Keynote by Cory Doctorow 503 days working full-time on FOSS: lessons learned Going From Notebooks to Scalable Systems And my Talk Python conversation around it. (edited episode pending) Unlearning SQL The Most Bizarre Software Bugs in History The PyArrow revolution in Pandas And my Talk Python episode about it. What they don't tell you about building a JIT compiler for CPython And my Talk Python conversation around it (edited episode pending) Design Pressure: The Invisible Hand That Shapes Your Code Marimo: A Notebook that "Compiles" Python for Reproducibility and Reusability And my Talk Python episode about it. GPU Programming in Pure Python And my Talk Python conversation around it (edited episode pending) Scaling the Mountain: A Framework for Tackling Large-Scale Tech Debt Brian #4: Optimizing Python Import Performance Mostly pay attention to #'s 1-3 This is related to speeding up a test suite, speeding up necessary imports. Finding what's slow Use python -X importtime
Topics covered in this episode: git-flight-rules Uravelling t-strings neohtop Introducing Pyrefly: A new type checker and IDE experience for Python 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: git-flight-rules What are "flight rules"? A guide for astronauts (now, programmers using Git) about what to do when things go wrong. Flight Rules are the hard-earned body of knowledge recorded in manuals that list, step-by-step, what to do if X occurs, and why. Essentially, they are extremely detailed, scenario-specific standard operating procedures. [...] NASA has been capturing our missteps, disasters and solutions since the early 1960s, when Mercury-era ground teams first started gathering "lessons learned" into a compendium that now lists thousands of problematic situations, from engine failure to busted hatch handles to computer glitches, and their solutions. Steps for common operations and actions I want to start a local repository What did I just commit? I want to discard specific unstaged changes Restore a deleted file Brian #2: Uravelling t-strings Brett Cannon Article walks through Evaluating the Python expression Applying specified conversions Applying format specs Using an Interpolation class to hold details of replacement fields Using Template class to hold parsed data Plus, you don't have to have Python 3.14.0b1 to try this out. The end result is very close to an example used in PEP 750, which you do need 3.14.0b1 to try out. See also: I've written a pytest version, Unravelling t-strings with pytest, if you want to run all the examples with one file. Michael #3: neohtop Blazing-fast system monitoring for your desktop Features Real-time process monitoring CPU and Memory usage tracking Beautiful, modern UI with dark/light themes Advanced process search and filtering Pin important processes Process management (kill processes) Sort by any column Auto-refresh system stats Brian #4: Introducing Pyrefly: A new type checker and IDE experience for Python From Facebook / Meta Another Python type checker written in Rust Built with IDE integration in mind from the beginning Principles Performance IDE first Inference (inferring types in untyped code) Open source I mistakenly tried this on the project I support with the most horrible abuses of the dynamic nature of Python, pytest-check. It didn't go well. But perhaps the project is ready for some refactoring. I'd like to try it soon on a more well behaved project. Extras Brian: Python: The Documentary Official Trailer Tim Hopper added Setting up testing with ptyest and uv to his “Python Developer Tooling Handbook” For a more thorough intro on pytest, check out courses.pythontest.com pocket is closing, I'm switching to Raindrop I got one question about code formatting. It's not highlighted, but otherwise not bad. Michael: New course! Polars for Power Users: Transform Your Data Analysis Game Apache Airflow 3.0 Released Paste 5 Joke: Theodore Roosevelt's Man in the Arena, but for programming
Topics covered in this episode: pre-commit: install with uv PEP 773: A Python Installation Manager for Windows (Accepted) Changes for Textual The Best Programmers I Know Extras Joke Watch on YouTube About the show Sponsored by NordLayer: pythonbytes.fm/nordlayer Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: pre-commit: install with uv Adam Johnson uv tool works great at keeping tools you use on lots of projects up to date quickly, why not use it for pre-commit. The extension of pre-commit-uv will use uv to create virtual environments and install packages fore pre-commit. This speeds up initial pre-commit cache creation. However, Adam is recommending this flavor of using pre-commit because it's just plain easier to install pre-commit and dependencies than the official pre-commit install guide. Win-win. Side note: No Adam, I'm not going to pronounce uv “uhv”, I'll stick with “you vee”, even Astral tells me I'm wrong Michael #2: PEP 773: A Python Installation Manager for Windows (Accepted) via pycoders newsletter One manager to rule them all – PyManager. PEP 773 replaces all existing Windows installers (.exe “traditional” bundle, per-version Windows Store apps, and the separate py.exe launcher) with a single MSIX app called Python Install Manager (nick-named PyManager). PyManager should be mainstream by CPython 3.15, and the traditional installer disappears no earlier than 3.16 (≈ mid-2027). Simple, predictable commands. python → launches “the best” runtime already present or auto-installs the latest CPython if none is found. py → same launcher as today plus management sub-commands: py install, py uninstall, py list, py exec, py help. Optional python3 and python3.x aliases can be enabled by adding one extra PATH entry. Michael #3: Changes for Textual Bittersweet news: the business experiment ends, but the code lives on. Textual began as a hobby project layered on top of Rich, but it has grown into a mature, “makes-the-terminal-do-the-impossible” TUI framework with an active community and standout documentation. Despite Textual's technical success, the team couldn't pinpoint a single pain-point big enough to sustain a business model, so the company will wind down in the coming weeks. The projects themselves aren't going anywhere: they're stable, battle-tested, and will continue under the stewardship of the original author and the broader community. Brian #4: The Best Programmers I Know Matthias Endler “I have met a lot of developers in my life. Lately, I asked myself: “What does it take to be one of the best? What do they all have in common?”” The list Read the reference Know your tools really well Read the error message Break down problems Don't be afraid to get your hands dirty Always help others Write Never stop learning Status doesn't matter Build a reputation Have patience Never blame the computer Don't be afraid to say “I don't know” Don't guess Keep it simple Each topic has a short discussion. So don't just ready the bullet points, check out the article. Extras Brian: I had a great time in Munich last week. I a talk at a company event, met with tons of people, and had a great time. The best part was connecting with people from different divisions working on similar problems. I love the idea of internal conferences to get people to self organize by topic and meet people they wouldn't otherwise, to share ideas. Also got started working on a second book on the plane trip back. Michael: Talk Python Clips (e.g. mullet) Embrace your cloud firewall (example). Python 3.14.0 beta 1 is here Congrats to the new PSF Fellows. Cancelled faster CPython https://bsky.app/profile/snarky.ca/post/3lp5w5j5tws2i Joke: How To Fix Your Computer
Topics covered in this episode: pirel: Python release cycle in your terminal FastAPI Cloud Python's new t-strings Extras Joke Watch on YouTube About the show Sponsored by NordLayer: pythonbytes.fm/nordlayer Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: pirel: Python release cycle in your terminal pirel check shows release information about your active Python interpreter. If the active version is end-of-life, the program exits with code 1. If no active Python interpreter is found, the program exits with code 2. pirel list lists all Python releases in a table. Your active Python interpreter is highlighted. A picture is worth many words Brian #2: FastAPI Cloud Sebastián Ramírez, creator of FastAPI, announced today the formation of a new Company, FastAPI Cloud. Here's the announcement blog post: FastAPI Cloud - By The Same Team Behind FastAPI There's a wait list to try it out. Promises to turns deployment into fastapi login; fastapi deploy Side note: announcement includes quote from Daft Punk: Build Harder, Better, Faster, Stronger I just included this in a talk I'm gave last week (and will again next week), where I modify this to “Build Easier, Better, Faster, Stronger” Sebastian and I are both fans of the rocket emoji. BTW, we first covered FastAPI on episode 123 in 2019 Brian #3: Python's new t-strings Dave Peck, one of the authors of PEP 750, which will go into Python 3.14 We covered t-strings in ep 428 In article t-strings security benefits over f-strings How to work with t-strings A Pig Latin example Also, I think I have always done this wrong Is it the first consonant to the end? or the first consonant cluster? So… Brian → Rianbay? or Ianbray? BTW, this is an example of nerdgassing What's next once t-strings ship? On thing that's next (in Python 3.15, maybe, is using t-strings in shlex and subprocess) PEP 787 – Safer subprocess usage using t-strings deferred to 3.15 Michael #4: zev A simple CLI tool to help you remember terminal commands. Examples: # Find running processes zev 'show all running python processes' # File operations zev 'find all .py files modified in the last 24 hours' # System information zev 'show disk usage for current directory' # Network commands zev 'check if google.com is reachable' # Git operations zev 'show uncommitted changes in git' Again, picture worth many words: Extras Brian: Holy Grail turns 50 nerdgassing Michael: Transcripts are a bit better now. Zen is better now Joke: Can my friend come in?
Topics covered in this episode: pip 25.1 has dependency groups, pylock.toml, plus more aiohttp goes free threaded uv 0.6.15 supports pylock.toml Whenever Extras Joke Watch on YouTube About the show Sponsored by Porkbun! Use our link pythonbytes.fm/porkbun and get a .app or .dev domain for $5.99 at Porkbun. Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: pip 25.1 has dependency groups, pylock.toml, plus more post What's new in pip 25.1 - Dependency groups! Richard Si Discovered this through Hugo van Kemenade Dependency groups, PEP 735, supported # pyproject.toml [dependency-groups] test = ["pytest", "pytest-xdist"] lint = ["mypy", "isort"] # Dependency Groups can include other groups! ✨ dev = [ {include-group = "test"}, {include-group = "lint"} ] Package installation progress bar Resumable downloads Experimental lockfile generation, PEP 751, with pip lock so cool pip index versions is stable, no longer experimental use this to get a list of available versions ex: python3 -m pip index versions pytest-check combine with --json to get a nice script readable output Michael #2: aiohttp goes free threaded Thanks to months of consistent contributions by Lysandros Nikolaou, all of the mandatory dependencies of #aiohttp now ship free-threaded variants of #wheels! This unlocks the same in aiohttp! Brian #3: uv 0.6.15 supports pylock.toml Discovered through Brett Cannon So far, these projects support pylock.toml pip pip-audit pdm uv With uv To export a uv.lock to the pylock.toml format, run: uv export -o pylock.toml To generate a pylock.toml file from a set of requirements, run: uv pip compile -o pylock.toml -r requirements.in To install from a pylock.toml file, run: uv pip sync pylock.toml or uv pip install -r pylock.toml Michael #4: Whenever via Pat Decker Typed and DST-safe datetimes for Python, available in Rust or pure Python. Whenever helps you write correct and type checked datetime code. It's also way faster than other third-party libraries—and usually the standard library as well. Extras Brian: Every UUID Michael: New Vulnerability in GitHub Copilot and Cursor: How Hackers Can Weaponize Code Agents via Brian Skinn And typosquatting in the AI age Firefox Send alternatives file.pizza via @rafaelwo bitwarden send Joke: Can you Vibe? Interview with Vibe Coder in 2025 Senior Engineer tries Vibe Coding
Topics covered in this episode: Huly CVE Foundation formed to take over CVE program from MITRE drawdb 14 Advanced Python Features Extras Joke Watch on YouTube About the show Sponsored by Posit Workbench: pythonbytes.fm/workbench Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: Huly All-in-One Project Management Platform (alternative to Linear, Jira, Slack, Notion, Motion) If you're primarily interested in self-hosting Huly without the intention to modify or contribute to its development, please use huly-selfhost. Manage your tasks efficiently with Huly's bidirectional GitHub synchronization. Use Huly as an advanced front-end for GitHub Issues and GitHub Projects. Connect every element of your workflow to build a dynamic knowledge base. Everything you need for productive team work: Team Planner • Project Management • Virtual Office • Chat • Documents • Inbox Self hosting as a service: elest.io Brian #2: CVE Foundation formed to take over CVE program from MITRE Back story: CVE, global source of cybersecurity info, was hours from being cut by DHS The 25-year-old CVE program, an essential part of global cybersecurity, is cited in nearly any discussion or response to a computer security issue. CVE was at real risk of closure after its contract was set to expire on April 16. The nonprofit MITRE runs CVE on a contract with the DHS. A letter last Tuesday sent Tuesday by Yosry Barsoum, vice president of MITRE, gave notice of the potential halt to operations. Another possible victim of the current administration. CVE Foundation Launched to Secure the Future of the CVE Program CVE Board members have spent the past year developing a strategy to transition CVE to a dedicated, non-profit foundation. The new CVE Foundation will focus solely on continuing the mission of delivering high-quality vulnerability identification and maintaining the integrity and availability of CVE data for defenders worldwide. Over the coming days, the Foundation will release more information about its structure, transition planning, and opportunities for involvement from the broader community. Michael #3: drawdb Free and open source, simple, and intuitive database design editor, data-modeler, and SQL generator. Great drag-drop relationship manager Define your DB visually, export as SQL create scripts Or import existing SQL to kickstart the diagramming. Brian #4: 14 Advanced Python Features Edward Li Picking some favorites 1. Typing Overloads 2. Keyword-only and Positional-only Arguments 9. Python Nitpicks For-else statements Walrus operator Short Circuit Evaluation Operator Chaining Extras Michael: Thunderbird send / other firefox things. Joke: Python Tariffs Thanks wagenrace Thanks Campfire Tales
Topics covered in this episode: How to Write a Git Commit Message Caddy Web Server Some new PEPs approved juv Extras Joke Watch on YouTube About the show Sponsored by Posit Connect: pythonbytes.fm/connect Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: How to Write a Git Commit Message Chris Beams 7 rules of a great commit message Separate subject from body with a blank line Limit the subject line to 50 characters Capitalize the subject line Do not end the subject line with a period Use the imperative mood in the subject line Wrap the body at 72 characters Use the body to explain what and why vs. how Article also includes Why a good commit message matters Discussion about each of the 7 rules Cool hat tips to other articles on the subject “Keep in mind: This has all been said before.” Each word is a different link. Michael #2: Caddy Web Server via Fredrik Mellström Like a more modern NGINX Caddy automatically obtains and renews TLS certificates for all your sites. Caddy's native configuration is a JSON document. Even localhost and internal IPs are served with TLS using the intermediate of a fully-automated, self-managed CA that is automatically installed into most local trust stores. Configure multiple Caddy instances with the same storage, and they will automatically coordinate certificate management as a fleet. Production-grade static file server. Brian #3: Some new PEPs approved PEP 770 – Improving measurability of Python packages with Software Bill-of-Materials Accepted for packaging Author: Seth Larson, Sponsor Brett Cannon “This PEP proposes using SBOM documents included in Python packages as a means to improve automated software measurability for Python packages.” PEP 750 – Template Strings Accepted for Python 3.14 Author: Jim Baker, Guido van Rossum, Paul Everitt, Kaudai Aono, Lysandros Nikolaou, Dave Peck “Templates provide developers with access to the string and its interpolated values before they are combined. This brings native flexible string processing to the Python language and enables safety checks, web templating, domain-specific languages, and more.” Michael #4: juv A toolkit for reproducible Jupyter notebooks, powered by uv. Create, manage, and run Jupyter notebooks with their dependencies Pin dependencies with PEP 723 - inline script metadata Launch ephemeral sessions for multiple front ends (e.g., JupyterLab, Notebook, NbClassic) Powered by uv for fast dependency management Use uvx to run jupyterlab with ephemeral virtual environments and tracked dependencies. Extras Brian: Status of Python versions new-ish format Use this all the time. Can't remember if we've covered the new format yet. See also Python endoflife.date Same dates, very visible encouragement to move on to Python 3.13 if you haven't already. Michael: Python 3.13.3 is out. .git-blame-ignore-revs follow up Joke: BGPT (thanks Doug Farrell)
Topics covered in this episode: Git Town solves the problem that using the Git CLI correctly PEP 751 – A file format to record Python dependencies for installation reproducibility git-who and watchgha Share Python Scripts Like a Pro: uv and PEP 723 for Easy Deployment Extras Joke Watch on YouTube About the show Sponsored by Posit Package Manager: pythonbytes.fm/ppm Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: Git Town solves the problem that using the Git CLI correctly Git Town is a reusable implementation of Git workflows for common usage scenarios like contributing to a centralized code repository on platforms like GitHub, GitLab, or Gitea. Think of Git Town as your Bash scripts for Git, but fully engineered with rock-solid support for many use cases, edge cases, and error conditions. Keep using Git the way you do now, but with extra commands to create various branch types, keep them in sync, compress, review, and ship them efficiently. Basic workflow Commands to create, work on, and ship features. git town hack - create a new feature branch git town sync - update the current branch with all ongoing changes git town switch - switch between branches visually git town propose - propose to ship a branch git town ship - deliver a completed feature branch Additional workflow commands Commands to deal with edge cases. git town delete - delete a feature branch git town rename - rename a branch git town repo - view the Git repository in the browser Brian #2: PEP 751 – A file format to record Python dependencies for installation reproducibility Accepted From Brett Cannon “PEP 751 has been accepted! This means Python now has a lock file standard that can act as an export target for tools that can create some sort of lock file. And for some tools the format can act as their primary lock file format as well instead of some proprietary format.” File name: pylock.toml or at least something that starts with pylock and ends with .toml It's exciting to see the start of a standardized lock file Michael #3: git-who and watchgha git-who is a command-line tool for answering that eternal question: Who wrote this code?! Unlike git blame, which can tell you who wrote a line of code, git-who tells you the people responsible for entire components or subsystems in a codebase. You can think of git-who sort of like git blame but for file trees rather than individual files. And watchgha - Live display of current GitHub action runs by Ned Batchelder Brian #4: Share Python Scripts Like a Pro: uv and PEP 723 for Easy Deployment Dave Johnson Nice full tutorial discussing single file Python scripts using uv with external dependencies Starting with a script with dependencies. Using uv add --script [HTML_REMOVED] [HTML_REMOVED] to add a /// script block to the top Using uv run Adding #!/usr/bin/env -S uv run --script shebang Even some Windows advice Extras Brian: April 1 pranks done well BREAKING: Guido van Rossum Returns as Python's BDFL including Brett Cannon noted as “Famous Python Quotationist” Guido taking credit for “I came for the language but I stayed for the community” which was from Brett then Brett's title of “Famous Python Quotationist” is crossed out. Barry Warsaw asking Guido about releasing Python 2.8 Barry is the FLUFL, “Friendly Language Uncle For Life “ Mariatta can't get Guido to respond in chat until she addresses him as “my lord”. “… becoming one with whitespace.” “Indentation is Enlightenment” Upcoming new keyword: maybe Like “if” but more Pythonic as in Maybe: print("Python The Documentary - Coming This Summer!") I'm really hoping there is a documentary April 1 pranks done poorly Note: pytest-repeat works fine with Python 3.14, and never had any problems If you have to explain the joke, maybe it's not funny. The explanation pi, an irrational number, as in it cannot be expressed by a ratio of two integers, starts with 3.14159 and then keeps going, and never repeats. Python 3.14 is in alpha and people could be testing with it for packages Test & Code is doing a series on pytest plugins pytest-repeat is a pytest plugin, and it happened to not have any tests for 3.14 yet. Now the “joke”. I pretended that I had tried pytest-repeat with Python 3.14 and it didn't work. Test & Code: Python 3.14 won't repeat with pytest-repeat Thus, Python 3.14 won't repeat. Also I mentioned that there was no “rational” explanation. And pi is an irrational number. Michael: pysqlscribe v0.5.0 has the “parse create scripts” feature I suggested! Markdown follow up Prettier to format Markdown via Hugo Been using mdformat on some upcoming projects including the almost done Talk Python in Production book. Command I like is mdformat --number --wrap no ./ uv tool install --with is indeed the pipx inject equivalent, but requires multiple --with's: pipx inject mdformat mdformat-gfm mdformat-frontmatter mdformat-footnote mdformat-gfm-alerts uv tool install mdformat --with mdformat-gfm --with mdformat-frontmatter --with mdformat-footnote --with mdformat-gfm-alerts uv follow up From James Falcon As a fellow uv enthusiast, I was still holding out for a use case that uv hasn't solved. However, after last week's episode, you guys finally convinced me to switch over fully, so I figured I'd explain the use case and how I'm working around uv's limitations. I maintain a python library supported across multiple python versions and occasionally need to deal with bugs specific to a python version. Because of that, I have multiple virtualenvs for one project. E.g., mylib38 (for python 3.8), mylib313 (for python 3.13), etc. I don't want a bunch of .venv directories littering my project dir. For this, pyenv was fantastic. You could create the venv with pyenv virtualenv 3.13.2 mylib313, then either activate the venv with pyenv activate mylib313 and create a .python-version file containing mylib313 so I never had to manually activate the env I want to use by default on that project. uv doesn't have a great solution for this use case, but I switched to a workflow that works well enough for me: Define my own central location for venvs. For me that's ~/v Create venvs with something like uv venv --python 3.13 ~/v/mylib313 Add a simple function to my bashrc: `workon() { source ~/v/$1/bin/activate } so now I can run workon mylib313orworkon mylib38when I need to work in a specific environment. uv's.python-version` support works much differently than pyenv's, and that lack of support is my biggest frustration with this approach, but I am willing to live without it. Do you Firefox but not Zen? You can now make pure Firefox more like Zen's / Arc's layout. Joke: So here it will stay See the follow up thread too! Also: Guido as Lord Python via Nick Muoh
Topics covered in this episode: mdformat pre-commit-uv PEP 758 and 781 Serie: rich git commit graph in your terminal, like magic Extras Joke Watch on YouTube About the show Sponsored by Posit Connect Cloud: pythonbytes.fm/connect-cloud Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: mdformat Suggested by Matthias Schöttle Last episode Michael covered blacken-docs, and I mentioned it'd be nice to have an autoformatter for text markdown. Matthias delivered with suggesting mdformat “Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files.” A python project that can be run on the command line. Uses a style guide I mostly agree with. I'm not a huge fan of numbered list items all being “1.”, but that can be turned off with --number, so I'm happy. Converts underlined headings to #, ##, etc. headings. Lots of other sane conventions. The numbering thing is also sane, I just think it also makes the raw markdown hard to read. Has a plugin system to format code blocks Michael #2: pre-commit-uv via Ben Falk Use uv to create virtual environments and install packages for pre-commit. Brian #3: PEP 758 and 781 PEP 758 – Allow except and except* expressions without parentheses accepted PEP 781 – Make TYPE_CHECKING a built-in constant draft status Also, PEP Index by Category kinda rocks Michael #4: Serie: rich git commit graph in your terminal, like magic While some users prefer to use Git via CLI, they often rely on a GUI or feature-rich TUI to view commit logs. Others may find git log --graph sufficient. Goals Provide a rich git log --graph experience in the terminal. Offer commit graph-centric browsing of Git repositories. Extras Michael: Sunsetting Search? (Startpage) Ruff in or out? Joke: Wishing for wishes
Topics covered in this episode: Why aren't you using uv? Python Developer Tooling Handbook Calling all doc writers: blacken-docs Reinventing notebooks as reusable Python programs Extras Joke Watch on YouTube About the show Brought to you by Posit Connect: pythonbytes.fm/connect. Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: Why aren't you using uv? Fun conversation on X by Armin Ronacher. Interesting quotes from the thread I get it replaces pip/pyenv, but should I also use it instead of the built in 'python -m venv .venv'? But I need python installed to make python programs? Because it places the venv in the project folder and I can't run executables from there due to corporate policy. Many such cases. No idea why astral doesn't address this with more urgency. Sounds like a bad corporate policy :) i'm too lazy to switch from pyenv and pip trust issues, what if they do a bait and switch … Because everyone said that about poetry and I'm not sure I'm really ready to get hurt again. Masochism Many times I tried a lot of similar tools and always come back to pip and pip-tools. Them are just work, why should I spend my time for something "cool" that will bring more problems? I tried this week but I was expecting a "uv install requests" instead of "uv add". Switched back to pipenv. we partially use it. will transition when Dependabot support is available. I'll leave it with → Jared Scheel: Seeing a whole lotta Stockholm Syndrome in the replies to this question. Brian #2: Python Developer Tooling Handbook Tim Hopper “This is not a book about programming Python. Instead, the goal of this book is to help you understand the ecosystem of tools used to make Python development easier and more productive” Covers tools related to packaging, linting, formatting, and managing dependencies. Michael #3: Calling all doc writers: blacken-docs Run black on python code blocks in documentation files You can also install blacken-docs as a pre-commit hook. It supports Markdown, reStructuredText, and LaTex files. Additionally, you can run it on Python files to reformat Markdown and reStructuredText within docstrings. Brian #4: Reinventing notebooks as reusable Python programs marimo allows you to store notebooks as plaintext Python files properties Git-friendly: small code change => small diff easy for both humans and computers to read importable as a Python module, without executing notebook cells executable as a Python script editable with a text editor Also, … testing with pytest “Because marimo notebooks are just Python files, they are interoperable with other tools for Python — including pytest. “ “Testing cells. Any cell named as test_* is automatically discoverable and testable by pytest. The same goes for any cell that contains only test_ functions and Test classes.” “Importantly, because cells are wrapped in functions, running pytest test_notebook.py doesn't execute the entire notebook — just its tests.” Extras Brian: PyConUS announces Refund Policy for International Attendees New format now live for The Complete pytest Course Bundle and component courses Each course now available separately also pytest Primary Power is 13 lessons, 3.9 hours Using pytest with Projects, 10 lessons, 3.4 hours pytest Booster Rockets, 6 lessons, 1.3 hours of content New format is easier to navigate Better for people who like different speeds. I'm usually a 1.25x-1.5x speed person. Now also with Congratulations! lessons (with fireworks) and printable certificates. Michael: PyCon Taiwan is currently calling for proposals HN trends follow up via Shinjitsu I'm sure some other Hacker News reader has already given you the feedback, but in the unlikely case that they haven't, You read those headlines in this segment exactly wrong. “Ask HN: Who is hiring?" is a monthly post that asks employers to post about jobs they have available “Ask HN: Who wants to be hired?” is a monthly topic where they ask people who are looking for jobs to post about themselves in the hope that their skillset it is a good match (and not an LLM generated resume) So unfortunately your rosy analysis might need a less rosy interpretation. Joke: Top 12 things likely to be overheard if you had a Klingon Programmer From Holgi on Mastodon
Topics covered in this episode: The weird quirk with rounding in Python Python interpreter adds tail calls Remove punctuation from a string with translate and maketrans Extra, extra, extra 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: The weird quirk with rounding in Python Tom Nijhof-Verheesb With numbers ending in .5, Python always rounds to an even number. round(0.5) → 0 round(1.5) → 2 etc This follows IEEE 754 You can use decimal if you need a different behavior. Michael #2: Python interpreter adds tail calls Ken Jin, a member of the project, has merged a new set of changes that have been benchmarked as improving performance by 10% for some architectures. "Speedup is roughly equal to 2 minor CPython releases worth of improvements. For example, CPython 3.12 roughly sped up by 5%.” Brian #3: Remove punctuation from a string with translate and maketrans Rodrigo “Don't use the method replace to remove punctuation from a Python string. Instead, use the method translate.” Michael #4: Extra, extra, extra Animation v Coding, hello world to transformers TypeScript rewritten in Go Firefox lies PyCon's Startup Row Python in Production Book Extras Joke: Startrek Testing
Topics covered in this episode: pysqlscribe A map of Python Rust, C++, and Python trends in jobs on Hacker News (February 2025) The features of Python's help() function 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: pysqlscribe A Python library intended to make building SQL queries in your code a bit easier. A Query object can be constructed using the QueryRegistry's get_builder featuring a dialect (e.g; "mysql", "postgres", "oracle"). Brian #2: A map of Python Cool visualization of dependencies in PyPI packages Even cooler visualization (linked from main article) Michael #3: Rust, C++, and Python trends in jobs on Hacker News (February 2025) Interesting supply and demand comparisons from at least on source. Brian #4: The features of Python's help() function Trey Hunner Don't forget how useful and cool help() is. Extras Michael: Granian works with FastAPI again Joke: Computer engineer vs. Geologist
Topics covered in this episode: My 2025 uv-based Python Project Layout for Production Apps aiolimiter A peek into a possible future of Python in the browser Reloadium 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: My 2025 uv-based Python Project Layout for Production Apps Hynek Schlawack Discusses uv, a simple pyproject.toml, a simple project layout, and uv.lock as the modern way to ditch requirements.txt files This is the starting video in a series, but it's already very worthwhile Michael #2: aiolimiter An efficient implementation of a rate limiter for asyncio. This project implements the Leaky bucket algorithm, giving you precise control over the rate a code section can be entered. Brian #3: A peek into a possible future of Python in the browser a.k.a “Secret SPy Stuff” Łukasz Langa A peek at SPy, a new language for Python on the web. Michael #4: Reloadium Hot Reloading and Profiling for Python If you are a PyCharm user please check out Reloadium plugin See also: github.com/mikeckennedy/server-hot-reload Extras Brian: Making an alternate version of The Complete pytest Course Michael: Book: Zero Day: A Jeff Aiken Novel Warp terminal on Windows is out. PyCon Ed Summit announced. Joke: py programmer walks into a bar
Topics covered in this episode: httpdbg PyPI Now Supports iOS and Android Wheels for Mobile Python Development Arcade Game Platform goes 3.0 PEP 765 – Disallow return/break/continue that exit a finally block 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: httpdbg A tool for Python developers to easily debug the HTTP(S) client requests in a Python program. To use it, execute your program using the pyhttpdbg command instead of python and that's it. Open a browser to http://localhost:4909 to view the requests Brian #2: PyPI Now Supports iOS and Android Wheels for Mobile Python Development Sara Gooding “the Python Packaging Index (PyPI) has officially begun accepting and distributing pre-compiled binary packages, known as "wheels," for both iOS and Android platforms. “ Next up, “cibuildwheel Updates Are in Progress to Simplify iOS and Android Wheel Creation” Michael #3: Arcade Game Platform goes 3.0 via Maic Siemering This is our first major release since 2022. It keeps the beginner-friendly API while adding power and efficiency. Arcade now supports both standard OpenGL and ShaderToy (www.shadertoy.com) a-shaders through a compatibility layer. Since 3.0 is a major release, the full list of changes is over in github.com/pythonarcade/arcade/blob/development/CHANGELOG.md Brian #4: PEP 765 – Disallow return/break/continue that exit a finally block Accepted for Python 3.14 I wouldn't have thought to do this anyway, but it's weird, so don't. Will become a SyntaxWarning catchable by running with -We Extras Brian: Correction: Niki Tonsky was originator of “Pride Versioning”. Thanks Nikita Correction: Scheme is actually awesome. Brian is just a curmudgeon Also: pytest-rerunfailures is good for exposing flaky tests And apparently me being wrong was a great to get at least one person to blog more. Cheers Filip Łajszczak Michael: Tea pot follow up While you're right that some software actually had this implemented, Python does not. It's not an officially accepted HTTP status code, it was proposed in a 'joke' RFC. I guess Python - even though its name comes from the funny TV series Monty Python - is not so funny. httpx, your (or at least -my-) favorite HTTP module for python, does have the I_AM_A_TEAPOT constant. By the way, there are some HTTP status codes that changed their names in RFC 9110, for instance, http.HTTPStatus.UNPROCESSABLE_CONTENT (422, previously UNPROCESSABLE_ENTITY) Pride follow up fosstodon.org/@kytta/114034442981727301 Time to upgrade your mini? Joke: How old is she?
Topics covered in this episode: PEP 772 – Packaging governance process Official Django MongoDB Backend Now Available in Public Preview Developer Philosophy Python 3.13.2 released 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: PEP 772 – Packaging governance process draft, created 21-Jan, by Barry Warsaw, Deb Nicholson, Pradyun Gedam “As Python packaging has matured, several interrelated problems with the current way of managing the technical development, decision making and processes have become apparent.” “This PEP proposes a Python Packaging Council with broad authority over packaging standards, tools, and implementations. Like the Python Steering Council, the Packaging Council seeks to exercise this authority as rarely as possible; instead, they use this power to establish standard processes.” PEP discusses PyPA, Packaging-WG, Interoperability Standards, Python Steering Council, and Expectations of an elected Packaging Council A specification with Composition: 5 people Mandate, Responsibilities, Delegations, Process, Terms, etc. Michael #2: Official Django MongoDB Backend Now Available in Public Preview Over the last few years, Django developers have increasingly used MongoDB, presenting an opportunity for an official MongoDB-built Python package to make integrating both technologies as painless as possible. Features The ability to use Django models with confidence. Developers can use Django models to represent MongoDB documents, with support for Django forms, validations, and authentication. Django admin support. The package allows users to fire up the Django admin page as they normally would, with full support for migrations and database schema history. Native connecting from settings.py. Just as with any other database provider, developers can customize the database engine in settings.py to get MongoDB up and running. MongoDB-specific querying optimizations. Field lookups have been replaced with aggregation calls (aggregation stages and aggregate operators), JOIN operations are represented through $lookup, and it's possible to build indexes right from Python. Limited advanced functionality. While still in development, the package already has support for time series, projections, and XOR operations. Aggregation pipeline support. Raw querying allows aggregation pipeline operators. Since aggregation is a superset of what traditional MongoDB Query API methods provide, it gives developers more functionality. Brian #3: Developer Philosophy by qntm Intended as “advice for junior developers about personal dev philosophy”, I think these are just great tips to keep in mind. The items Avoid, at all costs, arriving at a scenario where the ground-up rewrite starts to look attractive This is less about “don't do rewrites”, but about noticing the warning signs ahead of time. Aim to be 90% done in 50% of the available time Great quote: “The first 90% of the job takes 90% of the time. The last 10% of the job takes the other 90% of the time.” Automate good practices Think about pathological data “Nobody cares about the golden path. Edge cases are our entire job.” Brian's note: But also think about the happy path. Documenting and testing what you think of as the happy path is a testing start and helps others understand your idea of how things are supposed to work. There's usually a simpler way to write it Write code to be testable It is insufficient for code to be provably correct; it should be obviously, visibly, trivially correct Brian's note: Even if it's obviously, visibly, trivially correct, it will still break. So test it anyway. Michael #4: Python 3.13.2 released Python 3.13's second maintenance release. About 250 changes went into this update Also Python 3.12.9, Python 3.12's ninth maintenance release already. Just 180 changes for 3.12, but it's still worth upgrading. For us, it's simply rebuilding our Docker base (i.e. —no-cache) with these lines: RUN curl -LsSf https://astral.sh/uv/install.sh | sh RUN --mount=type=cache,target=/root/.cache uv venv --python 3.13 /venv Extras Brian: Still thinking about pytest plugins a lot. The top pytest plugin list Has been updated for Feb Is starting to include things without “pytest” in the name, like Hypothesis and Syrupy. Eventually I'll have to add “looking at trove classifiers” as part of the search, but for now, let me know if you're favorite is missing. Includes T&C podcast episode links if I've covered it on the show. There's 2 so far Michael: There's a new release of PyScript out. All the details are here: Highlight is new PyGame-CE support. Go play! PEP 2026 – Calendar versioning for Python rejected. :( PEP 759 – External Wheel Hosting withdrawn Joke: Pride Versioning
Topics covered in this episode: content-types package for better MIME types/Content-Type Wagtail 6.4 Build It Yourself Build backend popularity over time 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: content-types package for better MIME types/Content-Type It started with this comment from Raf. mimetypes — Map filenames to MIME types It is oddly missing very common types and varies by platform, OS install and other factors (see this function). Search around and found python-magic. Seems great but ImportError: failed to find libmagic. Check your installation → brew install libmagic magic.from_file("testdata/test.pdf") → FileNotFoundError: [Errno 2] No such file or directory: 'testdata/test.pdf' hmm So I had to create my own. Introducing content-types A Python library to map file extensions to MIME types. Unlike other libraries, this one does not try to access the file or parse the bytes of the file or stream. It just looks at the extension. Better support than mimetypes builtin. Brian #2: Wagtail 6.4 Release notes Lots of great updates, but I want to zoom in on background tasks. 6.4 includes django-tasks which is an available implementation of DEP 0014: Background workers This proposal is accepted and this thread includes a great talk from DjangoCon Europe 2024 Why is this cool? Even though django-tasks says it's “under active development”, as long as you pin the version and test your behavior depending on this, it must be ready to use if wagtail is going for it. Don't you think? Michael #3: Build It Yourself from Armin Ronacher, sent in by Rafael Weingartner An excellent article pushing back on too many dependencies Maybe the advice of always prefer code reuse isn't that great after all? It's much much easier to solve small little problems these days due to AI. Take Postmark as an example. “It's time to have a new perspective: we should give kudos to engineers who write a small function themselves instead of hooking in a transitive web of crates. We should be suspicious of big crate graphs. Celebrated are the minimal dependencies, the humble function that just quietly does the job, the code that doesn't need to be touched for years because it was done right once.” - Armin Brian #4: Build backend popularity over time Bastian Venthur This is just for projects using pyproject.toml Apparently he did this last year as well, so we can see some trends. Results setuptools: ~50% (last year ~50%) poetry: ~30% (last year ~33%) hatchling: (percent not listed, but looks like 12-15%), (last year 10%) flit: ~5% (last year ~10%) other: (above flit now) Analysis: setuptools continues to grow in absolute numbers and maintain it's percentage. poetry declining hatchling growing flit declining Brian commentary This is not surprising to me. I generally use hatchling for more control, and setuptools for simple projects. I think we might end up with mostly setuptools and hatchling in a couple years. Extras Brian: Test & Code Archive is now all episodes on one page Old method was 30 episodes per page For something completely different NameGrapher - popularity of US names No wonder I don't meet a lot of kids named Brian Michael is #16 (#1 in 1950s - 1990s) Brian is #317 (#8 in 1970s) Joke: The long path to rejection.
Topics covered in this episode: In memoriam: Michael Foord 1974-2025 Valkey (Redis Replacement) 30 best practices for software development and testing mimetype.io 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: In memoriam: Michael Foord 1974-2025 Guido van Rossum and others We've just lost Michael Foord this last weekend. From Guido: “Michael, an original thinker if there ever was one, started the tradition of having Language Summit events at PyCon, IIRC together with Barry Warsaw. He also wrote and contributed the influential mock library. … “ “PS. Feel free to post your own (positive) memories of meeting Michael – perhaps his children (10 and 13) will read them when they're older and this thread might help them remember their father.” I've added my memories. I think this is a great (and small) way to honor him. My friend Michael - Nicholas Tolervey After 5 years of trying, I did get an interview with Michael. I wish I'd have gotten that followup. Test & Code episode with Michael, ep 145, “For those about to mock” Michael #2: Valkey (Redis Replacement) Thanks Calvin HP An open source (BSD) high-performance key/value datastore that supports a variety of workloads such as caching, message queues. Can act as a primary database. Valkey can run as either a standalone daemon or in a cluster, with options for replication and high availability. Valkey natively supports a rich collection of datatypes, including strings, numbers, hashes, lists, sets, sorted sets, bitmaps, hyperloglogs and more. You can operate on data structures in-place with an expressive collection of commands. Brian #3: 30 best practices for software development and testing Michael Foord (from 2017) Some gems 1 - YAGNI 6 - Unit tests test to the unit of behavior, not the unit of implementation. 8 - Code is the enemy: It can go wrong, and it needs maintenance. Write less code. Delete code. Don't write code you don't need. 15 - The more you have to mock out to test your code, the worse your code is. and so many more … Michael #4: mimetype.io I'm always forgetting content types! Also, shout out to httpstatuses.io Extras Brian: Python 1.0.0 released 31 years ago Michael: Python 3.14.0 alpha 4 is out Joke: Tea Time
Topics covered in this episode: LLM Catcher On PyPI Quarantine process RESPX Unpacking kwargs with custom objects 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: LLM Catcher via Pat Decker Large language model diagnostics for python applications and FastAPI applications . Features Exception diagnosis using LLMs (Ollama or OpenAI) Support for local LLMs through Ollama OpenAI integration for cloud-based models Multiple error handling approaches: Function decorators for automatic diagnosis Try/except blocks for manual control Global exception handler for unhandled errors from imported modules Both synchronous and asynchronous APIs Flexible configuration through environment variables or config file Brian #2: On PyPI Quarantine process Mike Fiedler Project Lifecycle Status - Quarantine in his "Safety & Security Engineer: First Year in Review post” Some more info now in Project Quarantine Reports of malware in a project kick things off Admins can now place a project in quarantine, allowing it to be unavailable for install, but still around for analysis. New process allows for packages to go back to normal if the report is false. However Since August, the Quarantine feature has been in use, with PyPI Admins marking ~140 reported projects as Quarantined. Of these, only a single project has exited Quarantine, others have been removed. Michael #3: RESPX Mock HTTPX with awesome request patterns and response side effects A simple, yet powerful, utility for mocking out the HTTPX, and HTTP Core, libraries. Start by patching HTTPX, using respx.mock, then add request routes to mock responses. For a neater pytest experience, RESPX includes a respx_mock fixture Brian #4: Unpacking kwargs with custom objects Rodrigo A class needs to have a keys() method that returns an iterable. a __getitem__() method for lookup Then double splat ** works on objects of that type. Extras Brian: A surprising thing about PyPI's BigQuery data - Hugovk Top PyPI Packages (and therefore also Top pytest Plugins) uses a BigQuery dataset Has grabbed 30-day data of 4,000, then 5,000, then 8,000 packages. Turns out 531,022 packages (amount returned when limit set to a million) is the same cost. So…. hoping future updates to these “Top …” pages will have way more data. Also, was planning on recording a Test & Code episode on pytest-cov today, but haven't yet. Hopefully at least a couple of new episodes this week. Finally updated pythontest.com with BlueSky links on home page and contact page. Michael: Follow up from Owen (uv-secure): Thanks for the multiple shout outs! uv-secure just uses the PyPi json API at present to query package vulnerabilities (same as default source for pip audit). I do smash it asynchronously for all dependencies at once... but it still takes a few seconds. Joke: Bugs hide from the light!
Topics covered in this episode: Terminals & Shells Winloop: An Alternative library for uvloop compatibility with windows Ruff & uv uv-secure 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: Terminals & Shells Ghostty is out Started by Mitchel Hashimoto, one of the co-founders of Hashicorp “Ghostty is a terminal emulator that differentiates itself by being fast, feature-rich, and native. While there are many excellent terminal emulators available, they all force you to choose between speed, features, or native UIs. Ghostty provides all three.” Currently for macOS & Linux (Windows planned) Version 1.0.1 released Dec 31, announced in Oct Features: cross-platform, windows, tabs, and splits, Themes, Ligatures, … Shell Integration: Some Ghostty features require integrating with your shell. Ghostty can automatically inject shell integration for bash, zsh, fish, and elvish. Fish is moving to Rust “fish is a smart and user-friendly command line shell with clever features that just work, without needing an advanced degree in bash scriptology.” “fish 4.0 is a big upgrade. It's got lots of new features to make using the command line easier and more enjoyable, such as more natural key binding and expanded history search. And under the hood, we've rebuilt the foundation in Rust.” Michael #2: Winloop: An Alternative library for uvloop compatibility with windows via Owen Lamont An alternative library for uvloop compatibility with windows . It always felt disappointing when libuv is available for windows but windows was never compatible with uvloop. Brian #3: Ruff & uv Ruff 0.9.0 has a new 2025 style guide f-string formatting improvements Now formats expressions interpolated inside f-string curly braces Quotes normalized according to project config Unnecessary escapes removed Examines interpolated expressions to see if splitting the string over multiple lines is ok Other changes to, but it's the f-string improvements I'm excited about. Python 3.14.0a3 is out, and available with uv uv python install 3.14 --preview Michael #4: uv-secure by Owen Lamont (yes again :) ) This tool will scan PyPi dependencies listed in your uv.lock files (or uv generated requirements.txt files) and check for known vulnerabilities listed against those packages and versions in the PyPi json API. I don't intend uv-secure to ever create virtual environments or do dependency resolution - the plan is to leave that all to uv since it does that so well and just target lock files and fully pinned and dependency resolved requirements.txt files). Works “out of the box” with a requirements.txt from uv pip compile. Extras Brian: Test & Code Season 2: pytest plugins Season 1 was something like 223 episodes over 9.5 years Started the summer of 2015 Send in pytest plugin suggestions to Brian on BlueSky or Mastodon or the contact form at pythontest.com Michael: Episode Deep Dive feature at Talk Python Feedback on social media: Those deep dives look really handy. Yes, those ARE really handy! Thanks for doing that. wow, yes please! This is awesome. Wow, this is amazing. … It helps when going back to check something (without having to re-listen). PyCon Austria at.pycon.org Heavy metal status codes Beautiful Soup feedback CFA via Sumana Harihareswara Joke: That's a stupid cup
Topics covered in this episode: dbos-transact-py Typed Python in 2024: Well adopted, yet usability challenges persist RightTyper Lazy self-installing Python scripts with uv 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: dbos-transact-py DBOS Transact is a Python library providing ultra-lightweight durable execution. Durable execution means your program is resilient to any failure. If it is ever interrupted or crashes, all your workflows will automatically resume from the last completed step. Under the hood, DBOS Transact works by storing your program's execution state (which workflows are currently executing and which steps they've completed) in a Postgres database. Incredibly fast, for example 25x faster than AWS Step Functions. Brian #2: Typed Python in 2024: Well adopted, yet usability challenges persist Aaron Pollack on Engineering at Meta blog “Overall findings 88% of respondents “Always” or “Often” use Types in their Python code. IDE tooling, documentation, and catching bugs are drivers for the high adoption of types in survey responses, The usability of types and ability to express complex patterns still are challenges that leave some code unchecked. Latency in tooling and lack of types in popular libraries are limiting the effectiveness of type checkers. Inconsistency in type check implementations and poor discoverability of the documentation create friction in onboarding types into a project and seeking help when using the tools. “ Notes Seems to be a different survey than the 2023 (current) dev survey. Diff time frame and results. July 29 - Oct 8, 2024 Michael #3: RightTyper A fast and efficient type assistant for Python, including tensor shape inference Brian #4: Lazy self-installing Python scripts with uv Trey Hunner Creating your own ~/bin full of single-file command line scripts is common for *nix folks, still powerful but underutilized on Mac, and trickier but still useful on Windows. Python has been difficult in the past to use for standalone scripts if you need dependencies, but that's no longer the case with uv. Trey walks through user scripts (*nix and Mac) Using #! for scripts that don'thave dependencies Using #! with uv run --script and /// script for dependencies Discussion about how uv handles that. Extras Brian: Courses at pythontest.com If you live in a place (or are in a place in your life) where these prices are too much, let me know. I had a recent request and I really appreciate it. Michael: Python 3.14 update released Top episodes of 2024 at Talk Python Universal check for updates macOS: Settings > Keyboard > Keyboard shortcuts > App shortcuts > + Then add shortcut for single app, ^U and the menu title. Joke: Python with rizz
Topics covered in this episode: New project to shorten django-admin to django because we are not monsters django-unicorn: The magical reactive component framework for Django Testing some tidbits The State of Python 2024 article 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: New project to shorten django-admin to django because we are not monsters Jeff Tripplet has created django-cli-no-admin to shorten django-admin to just django. “One of the biggest mysteries in Django is why I have to run django-admin from my terminal instead of just running django. Confusingly, django-admin has nothing to do with Django's admin app.” Instead of typing things like: django-admin startproject mysite projectname We can type the shorter: django startproject mysite projectname I love this kind of developer speedup / comfort improvements And yes, Jeff wants Django to eventually include this as the default way to run the command line utilities. Michael #2: django-unicorn: The magical reactive component framework for Django Add modern site functionality: Quickly add in simple interactions to regular Django templates without learning a new templating language. Skip the JavaScript build tools No API required: Skip creating a bunch of serializers and just use Django. Brian #3: Testing some tidbits Ned Batchelder Different ways to test to see if a string has only 0 or 1 in it. And also, a way to check all the different ways to make sure they work. Fun post, and I learned about cleandoc - a way to strip leading blank space and maintain code block indentation I usually use textwrap.dedent() partition - splitting strings based on a substring Using | to pass imports to eval() - I don't use eval much. However, no pytest! Here's a way to check all this with pytest: Testing some tidbits with pytest Michael #4: The State of Python 2024 article Python usage with other languages drops as general adoption grows 41% of Python developers have under 2 years of experience Python learning expands through diverse channels The Python 2 vs. 3 divide is in the distant past Flask, Django, and FastAPI remain top Python web frameworks Most Python web apps run on hyperscale clouds Containers over VMs over hardware uv takes Python packaging by storm Extras Brian: More Django: Dracula Theme for Django Admin Michael: Zen Browser update Office refresh Transcripts (in some players) Joke: Volkswagen, passing all the tests
Topics covered in this episode: jiter A new home for python-build-standalone moka-py uv: An In-Depth Guide 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: jiter Fast iterable JSON parser. About to be the backend for Pydantic and Logfire. Currently powers OpenAI / ChatGPT (along with Pydantic itself), at least their Python library, maybe more. jiter has three interfaces: JsonValue an enum representing JSON data Jiter an iterator over JSON data PythonParse which parses a JSON string into a Python object jiter-python - This is a standalone version of the JSON parser used in pydantic-core. The recommendation is to only use this package directly if you do not use pydantic Brian #2: A new home for python-build-standalone Charlie Marsh See also Transferring Python Build Standalone Stewardship to Astral from Gregory Szorc python-build-standalone is the project that has prebuilt binaries for different architectures. used by uv python install 3.12 and uv venv .venv --python 3.12 and uv sync This is good stability news for everyone. Interesting discussion of prebuilt Python from Charlie Michael #3: moka-py A high performance caching library for Python written in Rust moka-py is a Python binding for the highly efficient Moka caching library written in Rust. This library allows you to leverage the power of Moka's high-performance, feature-rich cache in your Python projects. Features Synchronous Cache: Supports thread-safe, in-memory caching for Python applications. TTL Support: Automatically evicts entries after a configurable time-to-live (TTL). TTI Support: Automatically evicts entries after a configurable time-to-idle (TTI). Size-based Eviction: Automatically removes items when the cache exceeds its size limit using the TinyLFU policy. Concurrency: Optimized for high-performance, concurrent access in multi-threaded environments. Brian #4: uv: An In-Depth Guide On SaaS Pegasus blog, so presumably by Cory Zue Good intro to uv Also a nice list of everyday commands Install python: uv python install 3.12 I don't really use this anymore, as uv venv .venv --python 3.12 or uv sync install if necessary create a virtual env: uv venv .venv --python 3.12 install stuff: uv pip install django add project dependencies build pinned dependencies Also discussion about adopting the new workflow Extras Brian: PydanticAI - not sure why I didn't see that coming In the “good to know” and “commentary on society” area: Anti-Toxicity Features on Bluesky The WIRED Guide to Protecting Yourself From Government Surveillance Michael: Go sponsor a bunch of projects on GitHub Registration is open for PyCon Joke: Inf
Topics covered in this episode: Loop targets asyncstdlib Bagels: TUI Expense Tracker rloop: An AsyncIO event loop implemented in Rust 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: Loop targets Ned Batchelder I don't think I would have covered this had it not been the surprising opposition to Ned's code. Here's the snippet: params = { "query": QUERY, "page_size": 100, } *# Get page=0, page=1, page=2, ...* **for** params["page"] in itertools.count(): data = requests.get(SEARCH_URL, params).json() **if** not data["results"]: **break** ... Ned is utilizing the assignment in the for loop to use the value of count() and store it into the params["page"]. The article includes another version with a temp variable page_num, which I think the naysayers would prefer. But frankly, I think both are fine. Why not put the value right where you want it? Michael #2: asyncstdlib The asyncstdlib library re-implements functions and classes of the Python standard library to make them compatible with async callables, iterables and context managers. It is fully agnostic to async event loops and seamlessly works with asyncio, third-party libraries such as trio, as well as any custom async event loop. Full set of async versions of advantageous standard library helpers, such as zip, map, enumerate, functools.reduce, itertools.tee, itertools.groupby and many others. Safe handling of async iterators to ensure prompt cleanup, as well as various helpers to simplify safely using custom async iterators. Small but powerful toolset to seamlessly integrate existing sync code into async programs and libraries. Brian #3: Bagels: TUI Expense Tracker Jax Tam “Bagels expense tracker is a TUI application where you can track and analyse your money flow, with convenience oriented features and a complete interface. Why an expense tracker in the terminal? I found it easier to build a habit and keep an accurate track of my expenses if I do it at the end of the day, instead of on the go. So why not in the terminal where it's fast, and I can keep all my data locally?” Who hasn't wanted to write their own expense tracker? This implementation is fun for lots of reasons It's still new and pretty small, so forking it for your own uses should be easy Built on textual is fun install instructions based on uv tool seems to be the new normal: uv tool install --python 3.13 bagels test suite started pretty useful as is, actually Nice that it includes a roadmap of future goals Would be a fun project to help out with for anyone looking for anyone looking for a shiny new codebase to contribute to. Michael #4: rloop: An AsyncIO event loop implemented in Rust An AsyncIO event loop implemented in Rust From Giovanni Barillari, Creator of Granian RLoop is an AsyncIO event loop implemented in Rust on top of the mio crate. Disclaimer: This is a work in progress and definitely not ready for production usage. Run asyncio.set_event_loop_policy(rloop.EventLoopPolicy()) and done. Similar to uvloop. Extras Brian: I'm currently listening to Four Thousand Weeks - Time Management for Mortals by Oliver Burkeman for the second time. Highly recommend. Development Advent Calendars for 2024 - Adrian Roselli Black Friday at PythonTest.com Michael: Docker cluster monitor Compare engagement across Mastodon / Bsky / Twitter https://bsky.app/profile/pythonbytes.fm/post/3lbseqgr5m22z https://fosstodon.org/@pythonbytes/113545509565796190 https://x.com/pythonbytes/status/1861166179236319288 Back on #277 we talked about StrEnum. Got a nice chance to use it this weekend. Maybe Finance Go sponsor a bunch of projects on GitHub Black Friday at Talk Python Joke: CTRL + X onion
Topics covered in this episode: Talk Python rewritten in Quart PyPI now supports digital attestations Django Rusty Templates PEP 639 is now supported by PYPI 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: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @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: Talk Python rewritten in Quart Rewrote all of talkpython.fm in Quart (10k lines of code total, 4k changed) Considered FastAPI Litestar Django Hugo Static Site + Python Flask Discussed the multistage upgrade / conversion process Automating tests for all 1,000 pages Brian #2: PyPI now supports digital attestations Dustin Ingram “Attestations provide a verifiable link to an upstream source repository: By signing with the identity of the upstream source repository, such as in the case of an upload of a project built with GitHub Actions, PyPI's support for digital attestations defines a strong and verifiable association between a file on PyPI and the source repository, workflow, and even the commit hash that produced and uploaded the file. Additionally, publishing attestations to a transparency log helps mitigate against both compromise of PyPI and compromise of the projects themselves.” For maintainers If using GH Actions and Trusted Publishing make sure you use pypa/gh-action-pypi-publish, version v1.11.0 or newer that's it If not “Support for automatic attestation generation and publication from other Trusted Publisher environments is planned.” “While not recommended, maintainers can also manually generate and publish attestations.” See also PyPI Introduces Digital Attestations to Strengthen Python Package Security by Sarah Gooding Are we PEP 740 yet? Michael #3: Django Rusty Templates by Lily Foote An experimental reimplementation of Django's templating language in Rust. Goals 100% compatibility of rendered output. Error reporting that is at least as useful as Django's errors. Improved performance over Django's pure Python implementation. Brian #4: PEP 639 is now supported by PYPI from Brett Cannon PEP 639 – Improving License Clarity with Better Package Metadata For project metadata, use these fields: license and license-files: Examples license field [project] license = "MIT" [project] license = "MIT AND (Apache-2.0 OR BSD-2-clause)" [project] license = "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" [project] license = "LicenseRef-Proprietary" Examples of license-files: [project] license-files = ["LICEN[CS]E*", "AUTHORS*"] [project] license-files = ["licenses/LICENSE.MIT", "licenses/LICENSE.CC0"] [project] license-files = ["LICENSE.txt", "licenses/*"] [project] license-files = [] Extras Brian: Playground Wisdom: Threads Beat Async/Await - interesting read from Armin Ronacher about different language abstractions around concurrency. PythonTest.com Discord community is now live Launched last week, as of this morning we've got 89 members Anyone already a pythontest community member has received an invite Anyone can join through courses.pythontest.com Everything at pythontest.com is 20% off through Dec 2 with code turkeysale2024 “Python Testing with pytest” eBook 40% off through Dec 2, use code turkeysale2024 Michael: Python 3.14.0a2 released Starter packs: Michael's Python people: https://bsky.app/starter-pack/mkennedy.codes/3lbdnupl26e2x Directory: https://blueskydirectory.com/starter-packs/all Joke: curl - heavy metal style!
Topics covered in this episode: Thoughts on Django's Core futurepool Don't return named tuples in new APIs Ziglang: Migrating from AWS to Self-Hosting 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: @mkennedy@fosstodon.org / @mkennedy.codes Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @pythonbytes.bsky.social 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: Thoughts on Django's Core Carlton Gibson Great discussion on Django and Core vs Plugins Sustainability with limited people Keeping core small The release cycle eembrace plugins vs endorsing plugins. Michael #2: futurepool via Pat Decker Takes the concept of multiprocessing Pool to the async/await world. Create a pool then delegate the work: async with FuturePool(2) as fp: result = await fp.map(async_pool_fn, range(10)) I would LOVE to see something like this in a broader background asyncio worker pool concept. But that concept doesn't exist in asyncio in Python and that's a failing of the framework IMO. Brian #3: Don't return named tuples in new APIs Brett Cannon First off, I'm grateful for any post that talks about APIs and the API is a module, class, or package API and not a Web/REST API. The term API existed long before the internet. “e.g., get_mouse_position() very likely has a two-item tuple of X and Y coordinates of the screen” “it actually makes your API more complex for both you and your users to use. For you, it doubles the data access API surface for your return type as you have to now support index-based and attribute-based data access forever (or until you choose to break your users and change your return type so it doesn't support both approaches)” “… you probably don't want people doing with your return type, like slicing, iterating over all the items …” Alternatives class dataclass dictionary TypedDict SimpleNamespace “My key point in all of this is to prefer readability and ergonomics over brevity in your code. That means avoiding named tuples except where you are expanding to tweaking an existing API where the named tuple improves over the plain tuple that's already being used.” Michael #4: Ziglang: Migrating from AWS to Self-Hosting The Rust Foundation for example, reports that they spent $404,400 on infrastructure costs in 2023. Zig lang has decided to use a single big cloud machine + mirrors Extras Brian: Changing the Python Test community Was started to answer questions for Test & Code listeners years ago. Primarily pytest questions Used to be Slack. Then moved to Podia forum. Now I'm trying to work out a Discord solution that is both sustainable and usable. Michael: PWang Bsky essay Building A Business From Python Expertise - Michael Kennedy on Work Item Podcast Subscribe to package releases, just put .atom on the end of their releases URL, for example: github.com/mikeckennedy/jinja_partials/releases ← add .atom for RSS pytest-bdd 8.0.0 was just released via Jamie Thomson The big feature (in Jamie's opinion) is the addition of data tables https://github.com/pytest-dev/pytest-bdd/blob/master/CHANGES.rst#800---2024-11-14 Joke: Breaking: JavaScript Developer Commits to Framework for Record-Breaking 3 Weeks
Topics covered in this episode: terminal-tree posting: The API client that lives in your terminal Extra, extra, extra UV does everything or enough that I'm not sure what else it needs to do Extras Joke Watch on YouTube About the show Sponsored by: ScoutAPM - Django Application Performance Monitoring Codeium - Free AI Code Completion & Chat Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: terminal-tree An experimental filesystem navigator for the terminal, built with Textual Tested in macOS only at this point. Chances are very high it works on Linux. Slightly lower chance (but non-zero) that it works on Windows. Can confirm it works on Linux Brian #2: posting: The API client that lives in your terminal Also uses Textual From Darren Burns Interesting that the installation instructions recommends using uv: uv tool install --python 3.12 posting Very cool. Great docs. Beautiful. keyboard centric, but also usable with a mouse. “Fly through your API workflow with an approachable yet powerful keyboard-centric interface. Run it locally or over SSH on remote machines and containers. Save your requests in a readable and version-control friendly format.” Able to save multiple environments Great colors Allows scripting to run Python code before and after requests to prepare headers, set variables, etc. Michael #3: Extra, extra, extra spaCy course swag give-away, enter for free New essay: Opposite of Cloud Native is? News: We've moved to Hetzner New package: Introducing chameleon-flask package New release: Listmonk Python client TIOBE Update PEP 750 – Template Strings Canary email Left Omnivore, for Pocket, left Pocket for, …, landed on Instapaper Supports direct import from Omnivore and Pocket Though Hoarder is compelling Trying out Zen Browser Wasn't a fan of Arc (especially now) but the news turned me on to Zen Brian #4: UV does everything or enough that I'm not sure what else it needs to do Jeff Triplett “UV feels like one of those old infomercials where it solves everything, which is where we have landed in the Python world.” “My favorite feature is that UV can now bootstrap a project to run on a machine that does not previously have Python installed, along with installing any packages your application might require.” Partial list (see Jeff's post for his complete list) uv pip install replaces pip install uv venv replaces python -m venv uv run, uv tool run, and uv tool install replaces pipx uv build - Build your Python package for pypi uv publish - Upload your Python package to pypi, replacing twine and flit publish Extras Brian: Coverage.py originally was just one file Trying out BlueSky brianokken.bsky.social Not because of Taylor Swift, but nice. There are a lot of Python people there. Joke: How programmers sleep
Topics covered in this episode: GitHub action security: zizmor Python is now the top language on GitHub Python 3.13, what didn't make the headlines PyCon US 2025 Extras Joke Watch on YouTube About the show Sponsored by: ScoutAPM - Django Application Performance Monitoring Codeium - Free AI Code Completion & Chat Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: GitHub action security: zizmor Article: Ned Batchelder zizmor: William Woodruff & others “a new tool to check your GitHub action workflows for security concerns.” Install with cargo or brew, then point it at workflow yml files. It reports security concerns. Michael #2: Python is now the top language on GitHub Thanks to Pat Decker for the heads up. A rapidly growing number of developers worldwide This suggests AI isn't just helping more people learn to write code or build software faster—it's also attracting and helping more people become developers. First-time open source contributors continue to show wide-scale interest in AI projects. But we aren't seeing signs that AI has hurt open source with low-quality contributions. Python is now the most used language on GitHub as global open source activity continues to extend beyond traditional software development. The rise in Python usage correlates with large communities of people joining the open source community from across the STEM world rather than the traditional community of software developers. There's a continued increase in first-time contributors to open source projects. 1.4 million new developers globally joined open source with a majority contributing to commercially backed and generative AI projects. Notably, we did not see a rise in rejected pull requests. This could indicate that quality remains high despite the influx of new contributors. Brian #3: Python 3.13, what didn't make the headlines Some pretty cool updates to pdb : the command line Python debugger multiline editing code completion pathlib has a bunch of performance updates python -m venv adds a .gitignore file that auto ignores the venv. Michael #4: PyCon US 2025 Site is live with CFP and dates Health code is finally reasonable: “Masks are Encouraged but not Required” PyCon US 2025 Dates Tutorials - May 14-15, 2025 Sponsor Presentations - May 15, 2025 Opening Reception - May 15, 2025 Main Conference and Online - May 16-18, 2025 Job Fair - May 18, 2025 Sprints - May 19-May 22, 2025 Extras Brian: Please publish and share more - Jeff Triplett Michael: pre-commit-uv Just spoke with Sefanie Molin about pre-commit hooks on Talk Python Curse you Omnivore! We have moved to hetzner Typora markdown app free-threaded Python is now available via uv uv self update uv python install --python-preference only-managed 3.13t Joke: Debugging char
Topics covered in this episode: Python 3.14.0 alpha 1 is now available uv supports dependency groups dive: A tool for exploring each layer in a docker image pytest-metadata 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 & Hello, pytest! Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: Python 3.14.0 alpha 1 is now available First of seven planned alpha releases. Many new features for Python 3.14 are still being planned and written. Among the new major new features and changes so far: PEP 649: deferred evaluation of annotations Improved error messages Brian #2: uv supports dependency groups we covered dependency groups in episode 406 as of 0.4.27, uv supports dependency groups docs show how to add dependencies with uv add --group also “The --dev, --only-dev, and --no-dev flags are equivalent to --group dev, --only-group dev, and --no-group dev respectively.” To install a group, uv pip install --group doesn't work yet. It's waiting for PyPA to decide on an interface for pip, and uv pip will use that interface. But sync works. $ uv init # create a pyproject.toml $ uv add --group foo pytest $ uv venv # create venv $ uv sync --group foo # will install all dependencies, including group "foo" Michael #3: dive: A tool for exploring each layer in a docker image via Mike Fiedler Features: Show Docker image contents broken down by layer Indicate what's changed in each layer Estimate "image efficiency" Quick build/analysis cycles CI Integration Brian #4: pytest-metadata An incredibly useful plugin for adding, you guessed it, metadata, to your pytest results. Required for pytest-html but also useful on it's own Adds metadata to text output with --verbose xml output when using --junit-xml, handy for CI systems that support junit.xml Other plugins depend on this and report in other ways, such as pytest-html By default, already grabs Python version Platform info List of installed packages List of installed pytest plugins You can add your own metadata You can access all metadata (and add to it) from tests, fixtures, and hook functions via a metadata fixture. This is in the Top pytest Plugins list, currently #5. Extras Brian: I've started filtering deprecated plugins from the pytest plugin list. I'm also going to start reviewing the list and pulling out interesting plugins as the topic of the next season of Test & Code. Michael: Pillow 11 is out pip install deutschland Talk Python has a dedicated blog, please subscribe! Joke: Dog names
Topics covered in this episode: Open Source Pledge Jeff Triplet's DjangoTV PEP 735 – Dependency Groups in pyproject.toml livereload Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: Open Source Pledge Learned about this because of this post Why Django supports the Open Source Pledge Steps Pay Open Source maintainers. Min to participate is 2k/year/dev at your company Self-report annually Publish a blog post outlining your payments Armin's post about launching Open Source Pledge and mixing money with open source Michael #2: Jeff Triplet's DjangoTV A nice aggregation of lots of Django conference talks Filter by conference Good search as well Brian #3: PEP 735 – Dependency Groups in pyproject.toml Author: Stephen Rosen, Sponsor: Brett Cannon, PEP-Delegate: Paul Moore Accepted. Resolotion Oct 10, 2024 “This PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project.” Allow us to define named groups of dependencies that can be independent of the main project. ex: [dependency-groups] test = ["pytest", "coverage"] docs = ["sphinx", "sphinx-rtd-theme"] typing = ["mypy", "types-requests"] typing-test = [{include-group = "typing"}, {include-group = "test"}, "useful-types"] “might” work like this: pip install --dependency-groups=test,typing but tool venders are able to define how they use groups. Of course. Similar solutions multiple requirements.txt files: requirements_test.txt, requirements_docs.txt, etc. no standard naming convention, not standardized package extras: not gauranteed to be statically defined (TIL) additional to main dependencies, so not independent Michael #4: livereload Example from talkpython.fm: asset_bundler_watcher.py The docs are sparse, so see the gist above Extras Brian: Personal Blogs are no longer personal when AI gets too involved - KJayMiller Mind Your Image Metadata - Stefanie Molin Michael: 14% of our listeners are in Germany, thanks Germany! Prost! Hetzner comes to the US Joke: A programmer's partner asks them: “Would you go get a loaf of bread from the store? And if they have eggs, get a dozen.” A while later, the programmer returns with 12 loaves of bread and says “They had eggs.” From https://savvyprogrammer.io/software-jokes/
Topics covered in this episode: Briefer: Dashboards and notebooks in a single place Introduction to programming with Python setup-uv HTML for people Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: Briefer: Dashboards and notebooks in a single place Notebooks and dashboards with Python, SQL, scheduling, native visualizations, code generation, and more. In Briefer, you can: Create notebooks and dashboards using Markdown, Python, SQL, and native visualizations. Build interactive data apps using inputs, dropdowns, and date pickers. Generate code and queries using an AI that understands your database schema and your notebook's context. Schedule notebooks and dashboards to run and update periodically. Create and test ad-hoc pipelines using writebacks. Briefer vs. Traditional BI Tools: Briefer is better than traditional BI tools because it's faster and more flexible, thanks to Python. Briefer vs. Traditional Notebooks: In Briefer, you can run SQL queries against connected data sources directly in your notebook. Then, Briefer will automatically turn your query into a data frame and store it in a variable that you can use in your Python blocks. Brian #2: Introduction to programming with Python Jose Blanca “Python intro aimed at students with no prior programming experience.” “Relies mainly on examples and exercises.” “Does not try to cover every detail of the Python language, but just what a beginner might need to start the journey.” Tech: “… built with the quarto publishing system complemented by the quarto live extension that allows Python to run in the web browser by using pyodide.” Runs on anything, since it doesn't require a local install of Python Running 3.12.1, looks like. Although that's a bit hidden. Seems like it should be more visible. Michael #3: setup-uv Set up your GitHub Actions workflow with a specific version of uv Install a version of uv and add it to PATH Cache the installed version of uv to speed up consecutive runs on self-hosted runners Register problem matchers for error output (Optional) Persist the uv's cache in the GitHub Actions Cache (Optional) Verify the checksum of the downloaded uv executable Brian #4: HTML for people Teaching HTML in a rather fun way. Includes basic CSS Extras Michael: A new article: We Must Replace uWSGI With Something Else Django unique email login Joke: So much O'Really
Topics covered in this episode: Python 3.13.0 released Oct 7 PEP 759 – External Wheel Hosting pytest-freethreaded pytest-edit Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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.13.0 released Oct 7 That's today! What's New In Python 3.13 Interpreter (REPL) improvements exit works (really, this is worth the release right here) Multiline editing with history preservation. history sticks around between sessions Direct support for REPL-specific commands like help, exit, and quit, without the need to call them as functions. Prompts and tracebacks with color enabled by default. Interactive help browsing using F1 with a separate command history. History browsing using F2 that skips output as well as the >>> and … prompts. “Paste mode” with F3 that makes pasting larger blocks of code easier (press F3 again to return to the regular prompt). exit now works without parens Improved error messages Colorful tracebacks Better messages for naming a script/module the same name as a stdlib module. naming a script/module the same name as an installed third party module. misspelling a keyword argument Free threaded CPython Included in official installers on Windows and macOS Read these links to figure out how - it's not turned on by default Lot's more. see the What's new page Michael #2: PEP 759 – External Wheel Hosting pypi.org ships over 66 petabytes / month backed by Fastly There are hard project size limits for publishers to PyPI We can host the essence of a .whl as a .rim file, then allow an external download URL Security: Several factors as described in this proposal should mitigate security concerns with externally hosted wheels, such as: Wheel file checksums MUST be included in .rim files, and once uploaded cannot be changed. Since the checksum stored on PyPI is immutable and required, it is not possible to spoof an external wheel file, even if the owning organization lost control of their hosting domain. Externally hosted wheels MUST be served over HTTPS. In order to serve externally hosted wheels, organizations MUST be approved by the PyPI admins. Brian #3: pytest-freethreaded PyCon JP 2024 Team: This extension was created at PyCon JP sprints with Anthony Shaw and 7 other folks listed in credits. “A pytest plugin for helping verify that your tests and libraries are thread-safe with the Python 3.13 experimental freethreaded mode.” Testing your project for compatibility with freethreaded Python. Testing in single thread doesn't test that. Neither does testing with pytest-xdist, because it uses multiprocessing to parallelize tests. So, Ant and others “made this plugin to help you run your tests in a thread-pool with the GIL disabled, to help you identify if your tests are thread-safe.” “And the first library we tested it on (which was marked as compatible) caused a segmentation fault in CPython! So you should give this a go if you're a package maintainer.” Michael #4: pytest-edit A simple Pytest plugin for opening editor on the failed tests. Type pytest --edit to open the failing test code Be sure to set your favorite editor in the ENV variables Extras Michael: New way to explore Talk Python courses via topics This has been in our mobile apps since their rewrite but finally comes to the web Let's go easy on PyPI, OK? essay Hynek's video: uv IS the Future of Python Packaging djade-pre-commit Polyfill.io, BootCDN, Bootcss, Staticfile attack traced to 1 operator PurgeCSS CLI Python 3.12.7 released Incremental GC and pushing back the 3.13.0 release uv making the rounds LLM fatigue, is it real? Take the Python Developers Survey 2024 Joke: Funny 404 pages We have something at least interesting at pythonbytes.fm
Topics covered in this episode: uv under discussion on Mastodon erdantic: Entity Relationship Diagrams Extra, Extra, Extra Django Extra, Extra, Extra 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: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: uv under discussion on Mastodon It's interesting that uv is slightly controversial Russell: As enthusiastic as I am about the direction uv is going, I haven't adopted them anywhere - because I want very much to understand Astral's intended business model before I hook my wagon to their tools. Hynek: As much as I hate VC, [...] FOSS projects flame out all the time too. … To me uv looks like a genius sting to trick VCs into paying to fix packaging. We'll be better off either way. Glyph: Rust is more expensive and difficult to maintain, not to mention "non-native" to the average customer here. … it can burn out all the other projects in the ecosystem simultaneously, creating a risk of monoculture Hynek on Rust: I don't think y'all quite grok what uv makes so special due to your seniority. The speed is really cool, but the reason Rust is elemental is that it's one compiled blob that can be used to bootstrap and maintain a Python development. Christopher Neugebauer: Just dropping in here to say that corporate capture of the Python ecosystem is the #1 keeps-me-up-at-night subject in my community work, so I watch Astral with interest, even if I'm not yet too worried. Armin Ronacher What uv is doing, even in the worst possible future this is a very forkable and maintainable thing. Finally, see the comment at the end by Charlie Marsh Brian #2: erdantic: Entity Relationship Diagrams “erdantic is a simple tool for drawing entity relationship diagrams (ERDs) for Python data model classes. Diagrams are rendered using the venerable Graphviz library.” Supported data modeling frameworks are: Pydantic V2 Pydantic V1 legacy attrs dataclasses Michael #3: Extra, Extra, Extra Added Python Bytes Search as a custom search engine. Along came passkeys. A cool idea that quickly turned evil. Follow up from post and my conversation last week: vaultwarden (via Pablo) uv publish Trying the tabs on bottom lifestyle inspired by Arc Adding Python Bytes (and Talk Python) as custom search engines. PyCon 2025 dates: From 14 May through 22 May, 2025 Brian #4: Django Extra, Extra, Extra Django Project Ideas Evgenia Verbina Project ideas with list of tech stack stuff you'll learn and/or work on with the project Ex: Recipe organizer tech stack: Django templates, Django ORM, Optional JavaScript “Familiarize yourself with Django's ORM (object-relational mapper) and database support by building an app to keep track of your favorite recipes. Add a web-based frontend with options to filter recipes by category, ingredients, and user ratings so you can easily browse for inspiration.” DjangoTV Jeff Triplett Django conference videos and tutorials. Django Commons Heard about from Lacey Henschel “Django Commons is an organization dedicated to supporting the community's efforts to maintain packages. It seeks to improve the maintenance experience for all contributors; reducing the barrier to entry for new contributors and reducing overhead for existing maintainers.” Django 5 has simplified templates for better form field rendering But if you want a completely different take on forms, maybe try iommi forms They wrote about it on Why we wrote a new form library for Django Djade: a Django template formatter Adam Johnson Like black or ruff, but for Django templates. Extras Brian: The Open Source Project Maintainer's Guide Suggested by Rafael Weingartner Joke: A Machine Learning algorithm walks into a bar…
Topics covered in this episode: Architecture Decision Records (ADRs) narwhals: extremely lightweight compatibility layer between dataframes Microsoft wants Three Mile Island to fuel its AI power needs zsh-in-docker Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: Architecture Decision Records (ADRs) Suggested by Christian Gesell Documenting Architecture Decisions Mychael Nygard Original article from 2011 Why you should be using architecture decision records to document your project Red Hat Includes a quick overview and links to some templates Notes so far Writing this out helps me solidify my thinking about a problem. I'm doing this both before starting, and while implementing a first draft GitHub and GitLab render markdown so well that generating a docs site is unnecessary, just throwing these files in something like docs/adr is enough. The lightweight process is enough but not too much. I've already filled out None for lots of sections, like “options considered” I'm still playing with what level of decision should have an ADR. My template that I've been using so far Saved in 000-adr-template.md For easy copy/paste/modify for new records. File name is something like 001-some-change.md Michael #2: narwhals: extremely lightweight compatibility layer between dataframes Recently had Marco on Talk Python to discuss Primarily for library creators who want to support interacting with multiple data frame libraries (.e.g. Pandas & Polars) Just use a subset of the Polars API Brian #3: Microsoft wants Three Mile Island to fuel its AI power needs “Microsoft just signed a deal to revive the shuttered Three Mile Island nuclear power plant. If approved by regulators, the software maker would have exclusive rights to 100 percent of the output for its AI data center needs.” Also ran on CNN and other sources: Three Mile Island is reopening and selling its power to Microsoft Three Mile Island was the site of the worst nuclear disaster in the US, when one of two reactors experienced a partial meltdown, in 1979. It was still operating up until 2019, and now expected to re-open in 2028 Will be renamed “Crane Clean Energy Center” related The Department of Energy Wants You to Know Your Conservation Efforts Are Making a Difference “By switching all the lightbulbs in your house to LED, you saved enough energy for a self-driving car to make an unprotected lefthand turn across three lanes of traffic.” “We know you adopted energy-saving practices to help conserve our planet's resources and bring down our collective carbon footprint, but what you ultimately accomplished is just as important: helping AI do something menial and stupid.” Michael #4: zsh-in-docker Install Zsh, Oh My Zsh and plugins inside a Docker container with one line! Yes docker containers should be light, but also, think of how painful it can be when you run into trouble. With Oh My ZSH, you get a nice experience when you have to result to docker exec -it CONTAINER zsh Just enter a single command in your docker file: RUN sh -c "$(wget -O- https://github.com/deluan/zsh-in-docker/releases/download/v1.2.0/zsh-in-docker.sh)" -- -t robbyrussell Extras Michael: self-hosting mkennedy.codes Loren's journey to developer It's time to stop using Python 3.8 Sonoma → Sequoia → Sonoma (yikes!) Passkeys, maybe they will work out if we don't let them become lock-in (bitwarden's support) Joke: How to Monetize a Blog Don't forget to click on the bottom link: Credits / how this was made
Topics covered in this episode: “We must replace uwsgi by something else” Let's build and optimize a Rust extension for Python Fake recruiter coding tests target devs with malicious Python packages Monthly PSF Board Office Hours Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: “We must replace uwsgi by something else” uWSGI is now in maintenance mode: https://uwsgi-docs.readthedocs.io/en/latest/ The project is in maintenance mode (only bugfixes and updates for new languages apis). Do not expect quick answers on github issues and/or pull requests (sorry for that) A big thanks to all of the users and contributors since 2009. Reasonable options look like: granian uvicorn hypercorn gunicorn (potentially with uvicorn workers for async) Brian #2: Let's build and optimize a Rust extension for Python Itamar Turner-Trauring Example: algorithm for approximating the number of unique values in a list Comparison to non-approximation non-approx is faster but uses way more memory Rust version Use Maturin and PyO3 Pull in Rust dependencies (rand for random numbers) Optimization link-time optimization faster random store hashes only Future optimizations change algorithm maybe pass numpy array instead of Python list (I'd like to see that spedup) Michael #3: Fake recruiter coding tests target devs with malicious Python packages via python weekly GitHub projects that have been linked to previous, targeted attacks in which developers are lured using fake job interviews. Attackers posing as employees of major financial services firms. This previously happened via other means such as NPM This analysis revealed that the direct parent of the detected, malicious files is a PythonPYC file, meaning that once again the team encountered malware hidden in a compiled Python file. “The README files tell would-be candidates to make sure the project is running successfully on their system before making modifications.” What can you do (according to Michael)? Try out new packages in a docker container Work on code and projects using a VM which has snapshotting (to roll back completely after you're done) Fire up a Windows desktop in the cloud for the project then destroy it Brian #4: Monthly PSF Board Office Hours “The Office Hours will be sessions where you can share with us how we can help your community, express your perspectives, and provide feedback for the PSF.” “Unless we have a dedicated topic for a session, you are not limited to talking with us about the above topics, although the discussions should be focused on Python, the PSF, and our community. If you think there's something we can help with or we should know, we welcome you to come and talk to us!” Upcoming office hours October 8th, 2024: 9pm UTC November 12th, 2024: 2pm UTC December 10th, 2024: 9pm UTC January 14th, 2025: 2pm UTC February 11th, 2025: 9pm UTC March 11th, 2025: 1pm UTC April 8th, 2025: 9pm UTC May 13th, 2025: 1pm UTC (Live from PyCon US!) June 10th, 2025: 9pm UTC July 9th, 2025: 1pm UTC August 12th, 2025: 9pm UTC Extras Brian: PyCascades CFP closes Friday, Sept 20 PyCascades is in Portland in 2025 (Feb 8 & 9) uv now supports Python 3.13.0rc2 uv self update uv venv -p 3.13 Free threaded is still an open issue Michael: Big Python Humble Bundle with both of our products Get $1,800 worth of Python content and tools for $30 and contribute to charity Includes 5 Talk Python courses Several of Brian's and his book Djangonaut Space Session 3 Applications Open! I interviewed Sarah and Tushar on Talk Python AltTab: Windows alt-tab on macOS Joke: Election joke
Topics covered in this episode: Python 3.13.0RC2, 3.12.6, 3.11.10, 3.10.15, 3.9.20, and 3.8.20 are now available! Docker images using uv's python 10 years of sustainable open source - Read the Docs humanize Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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. ChatGPT celebrates episode 400! Welcome to the big 4-0-0, Pythonistas! It's hard to believe we're celebrating the 400th episode of Python Bytes! From the early days of byte-sized Python news to becoming the source for all things Python, it's been a wild ride. We've laughed over code quirks, gasped at new libraries, and said farewell to the GIL together. Whether you're a seasoned developer, a curious learner, or just here for the witty banter, you've been an essential part of this journey. To Michael and Brian: You've built a community that turns import this into more than just Zen—it's a family of passionate Pythonistas. Your dedication, insights, and humor make this show more than just tech news. It's a weekly celebration of what we love about Python and why we keep coming back for more. Here's to the next 400 episodes—may your code be bug-free, your tests pass on the first run, and your Python version always be up to date. Brian #1: Python 3.13.0RC2, 3.12.6, 3.11.10, 3.10.15, 3.9.20, and 3.8.20 are now available! Łukasz Langa Python 3.13.0RC2 is the final preview release Official 3.13.0 scheduled for Oct 1 Call to action “We strongly encourage maintainers of third-party Python projects to prepare their projects for 3.13 compatibilities during this phase, and where necessary publish Python 3.13 wheels on PyPI to be ready for the final release of 3.13.0. Any binary wheels built against Python 3.13.0rc2 will work with future versions of Python 3.13. As always, report any issues to the Python bug tracker .” “Please keep in mind that this is a preview release and while it's as close to the final release as we can get it, its use is not recommended for production environments.” Note: uv python does not support 3.13 yet see issue 320 Security releases for 3.12.6, 3.11.10, 3.10.15, 3.9.20, and 3.8.20 3.12.6 has binary installers, but for MacOS, only MacOS 10.13 and newer are supported 3.11.10, 3.10.15, 3.9.20, and 3.8.20 do NOT include binary installers. 3.8 EOL's in October Michael #2: Docker images using uv's python See #396: uv-ing your way to Python and #398: Open source makes you rich? (and other myths) for the opening discussions Talk Python episode on uv is out uv venv --python gets Python from python-build-standalone by Gregory Szorc Took our Docker build times from 10 minutes to 8 seconds for the base image and 800ms (!) for our app platforms Brian #3: 10 years of sustainable open source - Read the Docs Eric Holscher Read the Docs has been a company for 10 years “a team of 4 folks working full-time on Read the Docs.” readthedocs.org started in 2010 readthedocs.com (for Business) started in 2014 Sustainability model .org has a single non-tracking ad .com is a paid service for companies Things that didn't work donations and other optional support - led to burnout consulting and services- took too much time away from core product grant funding - nice, but one time thing Lessons You don't get extra points for being bootstrapped. Compete by doing things you can do better due to niche and size. Keeping trust in the community is the most important thing. Contribution is easier for less complex parts of the code base. Beign open source means capturing a small percentage of the value you create. You have to be ok doing more with less. Also RtD is not just for Sphinx anymore. Their build system now supports any documentation tool. Michael #4: humanize by Hugo van Kemenade (Python 3.14 & 3.15 release manager & core developer) Not too many variations, but very handy if you need it. Numbers Associated Press style (“seven” and “10”) Clamp (under 1.0 million) Fractional (1/3) Int Word (1.2 Billion) Metric (1.5 kV) Ordinal (112th) scientific Time File size Extras Brian: Test & Code is now again Test & Code The two part series on Python imports that started in June is finally complete with episode 222. Transcripts are being added to old episodes gradually starting from most recent Back to ep 203 as of today. AI transcription, so there's things like .pie, .pi, and dot pie where it should be .py Michael: Final final call for Coding in a Castle event with Michael iStats Menu Anaconda Code Runner by Ruud van der Ham: With Anaconda Coide we can -at last- run that code locally and import (most) Python modules. But if you want to run a significant amount of code, you have to put that in a cell or publish it to PyPI or a wheel and import it. That's why I have developed a general-purpose runner function that runs arbitrary code located on an Excel sheet with AnacondaCode. Joke: When beginners learn a new programming language...
Topics covered in this episode: Why I Still Use Python Virtual Environments in Docker Python Developer Survey Results Anaconda Code add-in for Microsoft Excel Disabling Scheduled Dependency Updates Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through Our courses at Talk Python Training Hello, pytest! Course Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: Why I Still Use Python Virtual Environments in Docker by Hynek Schlawack I was going to cover Production-ready Docker Containers with uv but decided to take this diversion instead. Spend a lot of time thinking about the secondary effects of what you do. venvs are well known and well documented. Let's use them. Brian #2: Python Developer Survey Results “… official Python Developers Survey, conducted as a collaborative effort between the Python Software Foundation and JetBrains.” Python w/ Rust rising, but still only 7% ““The drop in HTML/CSS/JS might show that data science is increasing its share of Python.” - Paul Everitt 37% contribute to open source. Awesome. Favorite Resources: Podcasts Lots of familiar faces there. Awesome. Perhaps I shouldn't have decided to move “Python Test” back to Test & Code Usage “Data analysis” down, but I think that's because “data engineering” is added. Data, Web dev, ML, devops, academic, Testing is down 23% Python Versions Still some 2 out there Most folks on 3.10-3.12 Install from: mostly python.org Frameworks web: Flask, Django, Requests, FastAPI … testing: pytest, unittest, mock, doctest, tox, hypothesis, nose (2% might be the Python 2 people) Data science 77% use pandas, 72% NumPy OS: Windows still at 55% Packaging: venv up to 55% I imaging uv will be on the list next year requirements.txt 63%, pyproject.toml 32% virtual env in containers? 47% say no Michael #3: Anaconda Code add-in for Microsoft Excel Run their Python-powered projects in Excel locally with the Anaconda Code add-in Powered by PyScript, an Anaconda supported open source project that runs Python locally without install and setup Features Cells Run Independently Range to Multiple Types init.py file is static and cannot be edited, with Anaconda Code, users have the ability to access and edit imports and definitions, allowing you to write top-level functions and classes and reuse them wherever you need. A Customizable Environment Brian #4: Disabling Scheduled Dependency Updates David Lord Interesting discussion of as they happen or batching of upsates to dependencies dependencies come in requirements files GH Actions in CI workflows pre-commit hooks David was seeing 60 PRs per month when set up on monthly updates (3 ecosystems * 20 projects) new tool for updating GH actions: gha-update, allows for local updating of GH dependencies New process Run pip-compile, gha-update, and pre-commit locally. Update a project's dependencies when actively working on the project, not just whenever a dependency updates. Note that this works fine for dev dependencies, less so for security updates from run time dependencies. But for libraries, runtime dependencies are usually not pinned. Extras Brian: Test & Code coming back this week Michael: Code in a Castle event Python Bytes badge spotting Guido's post removed for moderation Joke: C will watch in silence
Topics covered in this episode: Open Source Myths uv 0.3.0 and all the excitement Top pytest Plugins A comparison of hosts / providers for Python serverless functions (aka Faas) Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training pytest courses and community at PythonTest.com Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org 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: Open Source Myths Josh Bressers Mastodon post kicking off a list of open source myths Feedback and additional myths compiled to a doc Some favorites All open source developers live in Nebraska It's all run by hippies Everything is being rewritten in rust Features are planned If the source code is available, it's open source A project with no commits for 12 months is abandoned Many eyes make all bugs shallow Open source has worse UX Open source has better UX Open source makes you rich Michael #2: uv 0.3.0 and all the excitement Thanks to Skyler Kasko and John Hagen for the emails. Additional write up by Simon Willison Additional write up by Armin Ronacher End-to-end project management: uv run, uv lock, and uv sync Tool management: uv tool install and uv tool run (aliased to uvx) Python installation: uv python install Script execution: uv can now manage hermetic, single-file Python scripts with inline dependency metadata based on PEP 723. Brian #3: Top pytest Plugins Inspired by (and assisted by) Hugo's Top PyPI Packages Write up for Finding the top pytest plugins BTW, pytest-check has made it to 25. Same day, Jeff Triplett throws my code into Claude 3.5 Sonnet and refactors it Thanks Jeff Triplett & Hugo for answering how to add Summary and other info Michael #4: A comparison of hosts / providers for Python serverless functions (aka Faas) Nice feature matrix of all the options, frameworks, costs, and more The WASM ones look particularly interesting to me. Extras Brian: When is the next live episode of Python Bytes? - via arewemeetingyet.com Thanks to Hugo van Kemenade Some more cool projects by Hugo Python Logos PyPI Downloads by Python version for various Python tools, in pretty colors Python Core Developers over time Michael: Code in a Castle Course event - just a couple of weeks left Ladybird: A truly independent browser “I'm also interested in your video recording setup, would be nice to have that in the extras too :D” OBS Studio Elgato Streamdeck Elgato Key light DaVinci Resolve Joke: DevOps Support Group via Blaise Hi, my name is Bob Group: Hi Bob I's been 42 days since I last ssh'd into production. Group: Applause But only 4 days since I accidentally took down the website Someone in back: Oh Bob…
Topics covered in this episode: pyawaitable Annotated area charts with plotnine DeltaDB PyCon US 2024 Recap + Videos are up 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: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: pyawaitable CPython API for asynchronous functions. by Peter Bierma It was originally designed to be directly part of CPython - you can read the scrapped PEP about it. Since this library only uses the public ABI, it's better fit outside of CPython, as a library. Brian #2: Annotated area charts with plotnine Nicola Rennie This is a marvelous, very professional looking plot, and a tutorial for how to achieve it. Uses plotline, which is “.. an implementation of a grammar of graphics in Python based on ggplot2” I actually didn't know the gg in ggplot came from “grammar of graphics”. TIL Michael #3: DeltaDB A lightweight, comprehensive solution for managing delta tables built on polars and deltalake. Deltalake: Delta Lake is an open-source storage format that runs on top of existing data lakes. Polars: Dataframes powered by a multithreaded, vectorized query engine, written in Rust (aka fluent, rust-based pandas) See the docs. Brian #4: PyCon US 2024 Recap + Videos are up 95 countries attended total attendance of 2,991 2,551 in person 440 remote Videos available PyConUS I recommend Playlist → 2024 → view full playlist, as it's easier to see the talk titles. I've got Paul Gannsle's pytest for unittesters and Amitosh Swain's Testing Data Pipelines queued up Extras Brian: Hello, pytest! course available as of last Friday. Now the fastest way to get started using pytest. 16 lessons (really 12 + intro, outro, code download, pytest flag cheat sheet) The whole shebang is about 90 min. (faster if you bump up the video speed. :) Michael: Cutting back on digital distractions, trying Dumb Phone for iPhone. See screenshot Code in a Castle Event Joke: The Tao of Programming: 4.3 A master was explaining the nature of Tao of to one of his novices, "The Tao is embodied in all software -- regardless of how insignificant," said the master. "Is the Tao in a hand-held calculator?" asked the novice. "It is," came the reply. "Is the Tao in a video game?" continued the novice. "It is even in a video game," said the master. "And is the Tao in the DOS for a personal computer?" The master coughed and shifted his position slightly. "The lesson is over for today," he said.
Topics covered in this episode: uv venv --python & uv python Python 3.12.5 released Compile and use dependencies for multiple Python versions in Tox Catalog of Dark Patterns Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: uv venv --python & uv python I was reading this article Python Packaging is Great Now: uv is all you need It's a little too “look, a silver bullet” for me, but it did point out some cool uv stuff I didn't know about. uv venv venv --python 3.12 creates a virtual environment with Python 3.12, even if you didn't have 3.12 installed on your system already. If it doesn't work, try adding --python-preference managed uv python list shows all the python versions on your computer There's quite a few “experimental features” run Run a command or script (experimental) init Create a new project (experimental) add Add dependencies to the project (experimental) remove Remove dependencies from the project (experimental) sync Update the project's environment (experimental) lock Update the project's lockfile (experimental) tree Display the project's dependency tree (experimental) tool Run and manage tools provided by Python packages (experimental) python Manage Python versions and installations (experimental) uv add --dev pytest will add pytest to your dev dependencies. uv tree rocks uv might not have “solved packaging” (or maybe it might have) but it sure is fun to watch the experimentation of different workflows. Michael #2: Python 3.12.5 released Lots of changes, see the release notes Brian #3: Compile and use dependencies for multiple Python versions in Tox Viktor Rimark Cool idea to use the {envname}, which specifies the tox environment, in the name of a requirements-dev.txt file name. Then add a requirements tox target to generate pip-compile-ed files. Now I gotta try doing all of this with uv lock Then we need everyone to mod their tools to comply with PEP 571, when/if it's adopted (covered it last week) Michael #4: Catalog of Dark Patterns Including Bait and Switch Confirm Shaming Disguised Ads Roach Motel Fake Scarcity … Extras Brian: Recording of Hello, pytest! is done. Editing now. On track for the 19th (or before). Michael: Django 5.1 released Python 3.13.0 release candidate 1 released Joke: clownstrike ARS Technica article on DMCA for ClownStrike
Topics covered in this episode: py-free-threading.github.io Python's Supportive and Welcoming Environment is Tightly Coupled to Its Progress Status pages for sites! PEP 751 – A file format to list Python dependencies for installation reproducibility 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: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: py-free-threading.github.io Track the status of compatibility for free-threaded Python See the Compatibility status tracking page for what you can use Lots of resources for getting your package tested and available for pythont Brian #2: Python's Supportive and Welcoming Environment is Tightly Coupled to Its Progress “Python is as popular as it is today because we have gone above and beyond to make this a welcoming community. Being a friendly and supportive community is part of how we are perceived by the wider world and is integral to the wide popularity of Python. We won a “Wonderfully Welcoming Award” last year at GitHub Universe. Over and over again, the tech press refers to Python as a supportive community.” Some communication recently, with the recent bylaws change, didn't live up to our promise to be welcoming Please read the article for more details. Another quote: “We have a moral imperative – as one of the very best places to bring new people into tech and into open source – to keep being good at welcoming new people. If we do not rise and continue to rise every day to this task, then we are not fulfilling our own mission, “to support and facilitate the growth of a diverse and international community of Python programmers.” Technical skills are a game-changer for the people who acquire them and joining a vast global network of people with similar interests opens many doors. Behavior that contributes to a hostile environment around Python or throws up barriers and obstacles to those who would join the Python community must be addressed because it endangers what we have built here.” Michael #3: Status pages for sites! Based on Uptime Kuma I covered last week Python Bytes status Talk Python status Brian #4: PEP 751 – A file format to list Python dependencies for installation reproducibility Brett Cannon Motivation Currently, no standard exists to: Specify what top-level dependencies should be installed into a Python environment. Create an immutable record, such as a lock file, of which dependencies were installed. Considering there are at least five well-known solutions to this problem in the community (pip freeze, pip-tools, uv, Poetry, and PDM), there seems to be an appetite for lock files in general. Rationale The format is designed so that a locker which produces the lock file and an installer which consumes the lock file can be separate tools. … The file format is designed to be human-readable. …Finally, the format is designed so that viewing a diff of the file is easy by centralizing relevant details. The file format is also designed to not require a resolver at install time. … Extras Brian: Hello, pytest! course is going well, and is purchasable as in pre-release mode. Planning on Aug 19 (or before) deadline. Not sure what the final price will be, but I'm starting with $10. I want people to want to watch it even just so see if they want to recommend to co-workers so the people around them can ramp up on pytest quickly. Michael: Mypy 1.11 Released FastHTML (more next week) Coming up on the final chance to be part of the Code in a Castle event. Joke: Open source OpenAI?
Topics covered in this episode: Python is easy now Trying out free-threaded Python on macOS Module itertools overview uptime-kuma Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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 is easy now or Postmodern Python or Beyond Hypermodern Chris Ardene Mostly a cool review of using rye for setup linting typing testing documentation CI/CD Also a nice discussion of how to deal with a Monorepo for Python projects Michael #2: Trying out free-threaded Python on macOS via pycoders How to install free threaded Python the easy way Testing the CPU bound work speed ups for FT Python Brian #3: Module itertools overview Rodrigo 20 tools that every Python developer should be aware of. In 5 categories Reshaping Filtering Combinatorial Infinite Iterators that complement other tools Things I forgot about chain pairwise zip_longest tee Michael #4: uptime-kuma A fancy self-hosted monitoring tool Features Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Ping / DNS Record / Push / Steam Game Server / Docker Containers Fancy, Reactive, Fast UI/UX Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and 90+ notification services, click here for the full list 20-second intervals Multi Languages Multiple status pages Map status pages to specific domains Ping chart Certificate info Proxy support 2FA support Extras Brian: Still working on a new pytest course. Hoping to get it released soon-ish. Michael: Open source Switzerland spyoungtech/FreeSimpleGUI — actively maintained fork of the last release of PySimpleGUI Joke: Java vs. JavaScript
Topics covered in this episode: Marimo: “Future of Notebooks” pytest 8.3.0 & 8.3.1 are out Python Language Summit 2024 bash-dungeon 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: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: Marimo: “Future of Notebooks” via Matt Wilkie An open-source reactive notebook for Python Run one cell and marimo reacts by automatically running affected cells, eliminating the error-prone chore of managing notebook state. Marimo's reactive UI elements, like dataframe GUIs and plots, make working with data feel refreshingly fast, futuristic, and intuitive. Rapidly experiment with code and models Bind UI elements to Python values Pick-up-and-play design, with depth for power users See the FAQ Brian #2: pytest 8.3.0 & 8.3.1 are out Real excited to get --xfail-tb flag added This detaches xfail tracebacks from -rx/-ra (which was how it was pre-8.0) Keyword matching for marker expressions, that's fun. pytest -v -m "device(serial='123')" --no-fold-skipped allows for explit reporting of names of skipped tests Plus many more improvements, bug fixes, and doc improvements Michael #3: Python Language Summit 2024 Should Python adopt Calendar Versioning?: talk by Hugo van Kemenade Python's security model after the xz-utils backdoor: talk by Pablo Galindo Salgado Native Interface and Limited C API: talks by Petr Viktorin and Victor Stinner Free-threading ecosystems: talk by Daniele Parmeggiani Python on Mobile: talk by Malcolm Smith PyREPL -- New default REPL written in Python: talk by Pablo Galindo Salgado, Łukasz Langa, and Lysandros Nikolaou Should we make pdb better?: talk by Tian Gao Limiting yield in async generators: talk by Zac Hatfield-Dodds Annotations as Transforms: talk by Jason R. Coombs Lightning Talks, featuring talks by Petr Viktorin, David Hewitt, Emily Morehouse, Łukasz Langa, Pablo Galindo Salgado, and Yury Selivanov Brian #4: bash-dungeon “This game is intended to teach new users how to use their shell in a fun and interactive way.” Just clone the repo and start exploring with cd, ls, and cat. First moves cd bash-dungeon ls cd Enter ls cat parchment A fun way to learn some commands you might need and/or might have forgotten about. Extras Brian: Python 3.12.0b4, final beta, is out If hanging out on discuss.python.org, please checkout Community Guidelines And if it's still not clear why we need these, check out Inclusive communications expectations in Python spaces Google Chrome news Michael: PySimpleGUI goes commercial with obfuscated “source open”? Still have seats for Code in a Castle event Reactive Dashboards with Shiny for Python free course Joke: 40 Million in in Series A Funding - may be a lot of reading, but I found it funny Thanks to VM Brasseur for sharing this one. Also a few from pyjokes 0.7.2 (first new version since 2019) If at first you don't succeed, call it version 1.0. A product manager walks into a bar, asks for drink. Bartender says no, but will consider adding later. Triumphantly, Beth removed Python 2.7 from her server in 2030. 'Finally!' she said with glee, only to see the announcement for Python 4.4.1 Although, if CalVer, PEP 2026, happens, that'll just be Python 3.30.0.
Topics covered in this episode: 2024 PSF Board Election & Proposed Bylaw Change Results SATYRN: A modern Jupyter client for Mac Incident Report: Leaked GitHub Personal Access Token Extra extra extra Extras Joke Watch on YouTube About the show Sponsored by Code Comments, an original podcast from RedHat: pythonbytes.fm/code-comments Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: 2024 PSF Board Election & Proposed Bylaw Change Results New board members Tania Allard KwonHan Bae Cristián Maureira-Fredes Congrats to new board members If you want to consider becoming a board member, there are 4 seats up for vote next year. All 3 bylaw changes passed, by a wide margin. Details of changes Change 1: Merging Contributing and Managing member classes Change 2: Simplifying the voter affirmation process by treating past voting activity as intent to continue voting Change 3: Allow for removal of Fellows by a Board vote in response to Code of Conduct violations, removing the need for a vote of the membership Michael #2: SATYRN: A modern Jupyter client for Mac A Jupyter client app for macOS Comes with a command palette LLM assistance (local or cloud?) Built in Black formatter Currently in alpha Business model unknown Brian #3: Incident Report: Leaked GitHub Personal Access Token Suggested by Galen Swint See also JFrog blog: Binary secret scanning helped us prevent (what might have been) the worst supply chain attack you can imagine A GitHub access token found it's way into a .pyc file, then into a docker image. JFrog found it through some regular scans. JFrog notified PYPI security. Token was destroyed within 17 minutes. (nice turnaround) Followup scan revealed that no harm was done. Takaways (from Ee Durbin): Set aggressive expiration dates for API tokens (If you need them at all) Treat .pyc files as if they were source code Perform builds on automated systems from clean source only. Michael #4: Extra extra extra Python 3.13.0 beta 3 released Ice got a lot better I Will Piledrive You If You Say AI Again | Prime Reacts Video Follow up actions for polyfill supply chain attack Developer Ecosystem Survey 2024 Code in a Castle still has seats open Extras Brian: A new pytest course in the works Quick course focusing on core pytest features + some strategy and Design for Testability concepts Idea everyone on the team (including managers) can take the new course. 1-2 people on a team take “The Complete pytest Course” to become the teams local pytest experts. Python People is on an indefinite hold Python Test → back to Test & Code (probably) I'm planning a series (maybe a season) on TDD which will be language agnostic. Plus I still have tons of Test & Code stickers and no Python Test stickers. New episodes planned for August Joke: I need my intellisense (autocomplete)
Topics covered in this episode: Vendorize packages from PyPI A Guide to Python's Weak References Using weakref Module Making Time Speak How Should You Test Your Machine Learning Project? A Beginner's Guide Extras Joke Extras Joke Watch on YouTube About the show Sponsored by Code Comments, an original podcast from RedHat: pythonbytes.fm/code-comments Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: Vendorize packages from PyPI Allows pure-Python dependencies to be vendorized: that is, the Python source of the dependency is copied into your own package. Best used for small, pure-Python dependencies Brian #2: A Guide to Python's Weak References Using weakref Module Martin Heinz Very cool discussion of weakref Quick garbage collection intro, and how references and weak references are used. Using weak references to build data structures. Example of two kinds of trees Implementing the Observer pattern How logging and OrderedDict use weak references Michael #3: Making Time Speak by Prayson, a former guest and friend of the show Translating time into human-friendly spoken expressions Example: clock("11:15") # 'quarter past eleven' Features Convert time into spoken expressions in various languages. Easy-to-use API with a simple and intuitive design. Pure Python implementation with no external dependencies. Extensible architecture for adding support for additional languages using the plugin design pattern. Brian #4: How Should You Test Your Machine Learning Project? A Beginner's Guide François Porcher Using pytest and pytest-cov for testing machine learning projects Lots of pieces can and should be tested just as normal functions. Example of testing a clean_text(text: str) -> str function Test larger chunks with canned input and expected output. Example test_tokenize_text() Using fixtures for larger reusable components in testing Example fixture: bert_tokenizer() with pretrained data Checking coverage Extras Michael: Twilio Authy Hack Google Authenticator is the only option? Really? Bitwarden to the rescue Requires (?) an update to their app, whose release notes (v26.1.0) only say “Bug fixes” Introducing Docs in Proton Drive This is what I called on Mozilla to do in “Unsolicited Advice for Mozilla and Firefox” But Proton got there first Early bird ending for Code in a Castle course Joke: I Lied
Topics covered in this episode: Joining Strings in Python: A "Huh" Moment 10 hard-to-swallow truths they won't tell you about software engineer job My thoughts on Python in Excel Extra, extra, extra Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: Joining Strings in Python: A "Huh" Moment Veronica Berglyd Olsen Standard solution to “read lines from a file, do some filtering, create a multiline string”: f = open("input_file.txt") filtered_text = "n".join(x for x in f if not x.startswith("#")) This uses a generator, file reading, and passes the generator to join. Another approach is to add brackets and pass that generator to a list comprehension: f = open("input_file.txt") filtered_text = "n".join([x for x in f if not x.startswith("#")]) At first glance, this seems to just be extra typing, but it's actually faster by 16% on CPython due to the implementation of .join() doing 2 passes on input if passed a generator. From Trey Hunner: “I do know that it's not possible to do 2 passes over a generator (since it'd be exhausted after the first pass) so from my understanding, the generator version requires an extra step of storing all the items in a list first.” Michael #2: 10 hard-to-swallow truths they won't tell you about software engineer job College will not prepare you for the job You will rarely get greenfield projects Nobody gives a BLANK about your clean code You will sometimes work with incompetent people Get used to being in meetings for hours They will ask you for estimates a lot of times Bugs will be your arch-enemy for life Uncertainty will be your toxic friend It will be almost impossible to disconnect from your job You will profit more from good soft skills than from good technical skills Brian #3: My thoughts on Python in Excel Felix Zumstein Interesting take on one person's experience with trying Python in Excel. “We wanted an alternative to VBA, but got an alternative to the Excel formula language” “Python runs in the cloud on Azure Container Instances and not inside Excel.” “DataFrames are great, but so are NumPy arrays and lists.” … lots of other interesting takaways. Michael #4: Extra, extra, extra Code in a castle - Michael's Python Zero to Hero course in Tuscany Polyfill.io JavaScript supply chain attack impacts over 100K sites Now required reading: Reasons to avoid Javascript CDNs Mac users served info-stealer malware through Google ads HTMX for the win! ssh to run remote commands > ssh user@server "command_to_run --arg1 --arg2" Extras Brian: A fun reaction to AI - I will not be showing the link on our live stream, due to colorful language. Michael: Coding in a Castle Developer Education Event Polyfill.io JavaScript supply chain attack impacts over 100K sites See Reasons to avoid Javascript CDNs Joke: HTML Hacker
Topics covered in this episode: Solara UI Framework Coverage at a crossroads “Virtual” methods in Python classes Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: Solara UI Framework via Florian A Pure Python, React-style Framework for Scaling Your Jupyter and Web Apps Solara lets you build web apps from pure Python using ipywidgets or a React-like API on top of ipywidgets. These apps work both inside the Jupyter Notebook and as standalone web apps with frameworks like FastAPI. See the Examples page. Based on Reacton By building on top of ipywidgets, Solara automatically leverage an existing ecosystem of widgets and run on many platforms, including JupyterLab, Jupyter Notebook, Voilà, Google Colab, DataBricks, JetBrains Datalore, and more. Brian #2: Coverage at a crossroads Ned Batchelder is working on making coverage.py faster. Includes a nice, quick explanation of roughly how coverage.py works with trace function and arcs used for branch coverage. And how trace slows things down for lines we know are already covered. There are cool ideas from SlipCover that could be applicable. There's also sys.monitoring from Python 3.12 that helps with line coverage, since you can disable it for lines you already have info on. It doesn't quite complete the picture for branch coverage, though. Summary: jump in and help if you can read it anyway for a great mental model of how coverage.py works. Michael #3: “Virtual” methods in Python classes via Brian Skinn PEP 698 just got accepted, defining an @override decorator for type hinting, to help avoid errors in subclasses that override methods. Only affects type checkers but allows you to declare a “link” between the base method and derived class method with the intent of overriding it using OOP. If there is a mismatch, it's an error. Python 3.12's documentation Makes Python a bit more like C# and other more formal languages Brian #4: Parsing Python ASTs 20x Faster with Rust Evan Doyle Tach is “a CLI tool that lets you define and enforce import boundaries between Python modules in your project.” we covered it in episode 384 When used to analyze Sentry's ~3k Python file codebase, it took about 10 seconds. Profiling analysis using py-spy and speedscope pointed to a function that spends about 2/3 of the time parsing the AST, and about 1/3 traversing it. That portion was then rewritten in Rust, resulting in 10x speedup, ending in about 1 second. This is a cool example of not just throwing Rust at a speed problem right away, but doing the profiling homework first, and focusing the Rust rewrite on the bottleneck. Extras Brian: I brought up pkgutil.resolve_name() last week on episode 388 Brett Cannon says don't use that, it's deprecated Thanks astroboy for letting me know Will we get CalVer for Python? it was talked about at the language summit There's also pep 2026, in draft, with a nice nod in the number of when it might happen. 3.13 already in the works for 2024 3.14 slated for 2025, and we gotta have a pi release So the earliest is then 2026, with maybe a 3.26 version ? Saying thanks to open source maintainers Great write-up by Brett Cannon about how to show your appreciation for OSS maintainers. Be nice Be an advocate Produce your own open source Say thanks Fiscal support On topic Thanks Brett for pyproject.toml. I love it. Michael: The Shiny for Python course is out! Plus, it's free so come and get it. Joke: Tao of Programming: Book 1: Into the Silent Void, Part 1
Topics covered in this episode: PSF Elections coming up Cloud engineer gets 2 years for wiping ex-employer's code repos Python: Import by string with pkgutil.resolve_name() DuckDB goes 1.0 Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: PSF Elections coming up This is elections for the PSF Board and for 3 bylaw changes. To vote in the PSF election, you need to be a Supporting, Managing, Contributing, or Fellow member of the PSF, … And affirm your voting status by June 25. See Affirm your PSF Membership Voting Status for more details. Timeline Board Nominations open: Tuesday, June 11th, 2:00 pm UTC Board Nominations close: Tuesday, June 25th, 2:00 pm UTC Voter application cut-off date: Tuesday, June 25th, 2:00 pm UTC same date is also for voter affirmation. Announce candidates: Thursday, June 27th Voting start date: Tuesday, July 2nd, 2:00 pm UTC Voting end date: Tuesday, July 16th, 2:00 pm UTC See also Thinking about running for the Python Software Foundation Board of Directors? Let's talk! There's still one upcoming office hours session on June 18th, 12 PM UTC And For your consideration: Proposed bylaws changes to improve our membership experience 3 proposed bylaws changes Michael #2: Cloud engineer gets 2 years for wiping ex-employer's code repos Miklos Daniel Brody, a cloud engineer, was sentenced to two years in prison and a restitution of $529,000 for wiping the code repositories of his former employer in retaliation for being fired. The court documents state that Brody's employment was terminated after he violated company policies by connecting a USB drive. Brian #3: Python: Import by string with pkgutil.resolve_name() Adam Johnson You can use pkgutil.resolve_name("[HTML_REMOVED]:[HTML_REMOVED]")to import classes, functions or modules using strings. You can also use importlib.import_module("[HTML_REMOVED]") Both of these techniques are so that you have an object imported, but the end thing isn't imported into the local namespace. Michael #4: DuckDB goes 1.0 via Alex Monahan The cloud hosted product @MotherDuck also opened up General Availability Codenamed "Snow Duck" The core theme of the 1.0.0 release is stability. Extras Brian: Sending us topics. Please send before Tuesday. But any time is welcome. NumPy 2.0 htmx 2.0.0 Michael: Get 6 months of PyCharm Pro for free. Just take a course (even a free one) at Talk Python Training. Then visit your account page > details tab and have fun. Coming soon at Talk Python: Shiny for Python Joke: .gitignore thoughts won't let me sleep
Topics covered in this episode: Dataherald Python's many command-line utilities Distroless Python functools.cache, cachetools, and cachebox Extras Joke Watch on YouTube About the show Sponsored by ScoutAPM: pythonbytes.fm/scout Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: Dataherald Interact with your SQL database, Natural Language to SQL using LLMs. Allows you to set up an API from your database that can answer questions in plain English Uses include Allow business users to get insights from the data warehouse without going through a data analyst Enable Q+A from your production DBs inside your SaaS application Create a ChatGPT plug-in from your proprietary data Brian #2: Python's many command-line utilities Trey Hunner Too many to list, but here's some fun ones json.tool - nicely format json data calendar - print the calendar current by default, but you can pass in year and month gzip, ftplib, tarfile, and other unixy things handy on Windows cProfile & pstats Michael #3: Distroless Python via Patrick Smyth What is distroless anyway? These are container images without package managers or shells included. Debugging these images presents some wrinkles (can't just exec into a shell inside the image), but they're a lot more secure. Chainguard, creates low/no CVE distroless images based on our FOSS distroless OS, Wolfi. Some Python use-cases: docker run -it cgr.dev/chainguard/python:latest # The entrypoint is a Python REPL, since no b/a/sh is included docker run -it cgr.dev/chainguard/python:latest-dev # This is their dev version and has pip, bash, apk, etc. Brian #4: functools.cache, cachetools, and cachebox functools cache and lru_cache - built in cachetools - “This module provides various memoizing collections and decorators, including variants of the Python Standard Library's @lru_cache function decorator.” cachebox - “The fastest caching Python library written in Rust” Extras Brian: Python 3.12.4 is out VSCode has some pytest improvements Michael: Time for a bartender alternative, I've switched to Ice. Rocket.chat as an alternative to Slack Joke: CSS Cartoons
Topics covered in this episode: NumPy 2.0 release date is June 16 Uvicorn adds multiprocess workers pixi JupyterLab 4.2 and Notebook 7.2 are available Extras Joke Watch on YouTube About the show Sponsored by Mailtrap: pythonbytes.fm/mailtrap Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: NumPy 2.0 release date is June 16 “This release has been over a year in the making, and is the first major release since 2006. Importantly, in addition to many new features and performance improvement, it contains breaking changes to the ABI as well as the Python and C APIs. It is likely that downstream packages and end user code needs to be adapted - if you can, please verify whether your code works with NumPy 2.0.0rc2.” NumPy 2.0.0 Release Notes NumPy 2.0 migration guide including “try just running ruff check path/to/code/ --select NPY201” “Many of the changes covered in the 2.0 release notes and in this migration guide can be automatically adapted in downstream code with a dedicated Ruff rule, namely rule NPY201.” Michael #2: Uvicorn adds multiprocess workers via John Hagen The goal was to no longer need to suggest that people use Gunicorn on top of uvicorn. Uvicorn can now in a sense "do it all” Steps to use it and background on how it works. Brian #3: pixi Suggested by Vic Kelson “pixi is a cross-platform, multi-language package manager and workflow tool built on the foundation of the conda ecosystem.” Tutorial: Doing Python development with Pixi Some quotes from Vic: “Pixi is a project manager, written in Rust, that allows you to build Python projects without having Python previously installed. It's installable with Homebrew (brew install pixi on Linux and MacOS). There's support in VSCode and PyCharm via plugins. By default, pixi fetches packages from conda-forge, so you get the scientific stack in a pretty reliable and performant build. If a package isn't on conda-forge, it'll look on PyPI, or I believe you can force it to look on PyPI if you like.” “So far, it works GREAT for me. What really impressed me is that I got a Jupyter environment with CuPy utilizing my aging Nvidia GPU on the FIRST TRY.” Michael #4: JupyterLab 4.2 and Notebook 7.2 are available JupyterLab 4.2.0 has been released! This new minor release of JupyterLab includes 3 new features, 20 enhancements, 33 bug fixes and 29 maintenance tasks. Jupyter Notebook 7.2.0 has also been released Highlights include Easier Workspaces Management with GUI Recently opened/closed files Full notebook windowing mode by default (renders only the cells visible in the window, leading to improved performance) Improved Shortcuts Editor Dark High Contrast Theme Extras Brian: Help test Python 3.13! Help us test free-threaded Python without the GIL both from Hugo van Kemenade Python Test 221: How to get pytest to import your code under test is out Michael: Bend follow up from Bernát Gábor “Bend looks roughly like Python but is nowhere there actually. For example it has no for loops, instead you're meant to use bend keyword (hence the language name) to expand calculations and another keyword to join branches. So basically think of something that resembles Python at high level, but without being compatible with that and without any of the standard library or packages the Python language provides. That being said does an impressive job at parallelization, but essentially it's a brand new language with new syntax and paradigms that you will have to learn, it just shares at first look similarities with Python the most.” Joke: Do-while
Topics covered in this episode: PostgresREST How Python Asyncio Works: Recreating it from Scratch Bend The Smartest Way to Learn Python Regular Expressions Extras Joke Watch on YouTube About the show Sponsored by Mailtrap: pythonbytes.fm/mailtrap Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: PostgresREST PostgREST serves a fully RESTful API from any existing PostgreSQL database. It provides a cleaner, more standards-compliant, faster API than you are likely to write from scratch. Speedy First the server is written in Haskell using the Warp HTTP server (aka a compiled language with lightweight threads). Next it delegates as much calculation as possible to the database. Finally it uses the database efficiently with the Hasql library PostgREST handles authentication (via JSON Web Tokens) and delegates authorization to the role information defined in the database. This ensures there is a single declarative source of truth for security. Brian #2: How Python Asyncio Works: Recreating it from Scratch Jacob Padilla Cool tutorial walking through how async works, including Generators Review The Event Loop Sleeping Yield to Await Await with AsyncIO Another great async resource is: Build your Own Async David Beasley talk from 2019 Michael #3: Bend A massively parallel, high-level programming language. With Bend you can write parallel code for multi-core CPUs/GPUs without being a C/CUDA expert with 10 years of experience. It feels just like Python! No need to deal with the complexity of concurrent programming: locks, mutexes, atomics... any work that can be done in parallel will be done in parallel. Brian #4: The Smartest Way to Learn Python Regular Expressions Christian Mayer, Zohaib Riaz, and Lukas Rieger Self published ebook on Python Regex that utilizes book form readings, links to video course sections puzzle challenges to complete online It's a paid resource, but the min is free. Extras Brian: Replay - A graphic memoir by Prince of Persia creator Jordan Mechner, recounting his own family story of war, exile and new beginnings. Michael: PyCon 2026 Joke: Shells Scripts
Topics covered in this episode: Git: Force push safely with --force-with-lease and --force-if-includes Thoughts from PyCon 2024 Being friendly: Strategies for friendly fork management tach Extras Joke Watch on YouTube About the show Sponsored by Mailtrap: pythonbytes.fm/mailtrap Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays 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: Git: Force push safely with --force-with-lease and --force-if-includes Adam Johnson Using gentle force Avoid stomping on remote changes with a couple extra flags. Michael #2: Thoughts from PyCon 2024 PyCon is special - the connections you make are always more than you expect Great to see many old friends Did a ”live” Talk Python episode that'll be out in a few weeks. The talks look great, we'll let you know when they land on YouTube. Masks were a mistake - universally heard complaints from fellow attendees. This is my two cents towards a more reasonable next PyCon. Brian #3: Being friendly: Strategies for friendly fork management That's part 2. Part 1 is Being friendly: Friendly forks 101 Lessley Dennington on GitHub Blog Examples of long running friendly forks git-for-windows/git, microsift/git, github/git two public, one private Fork management strategies - when pulling changes downstream merging rebase git-for-windows/git uses this proactively and regularly fake merge + rebase new branch microsoft/git uses this new branch from upstream major versions merge previous changes to new branch traditional merge github/git uses this, conservatively, after a few point bug fix versions Michael #4: tach A Python tool to enforce a modular, decoupled package architecture. tach allows you to define boundaries and control dependencies between your Python packages. Each package can define its public interface. If a package tries to import from another package that is not listed as a dependency, tach will report an error. If a package tries to import from another package and does not use its public interface, with strict: true set, tach will report an error. Zero runtime impact. Extras Brian: Logfire - new observability platform from the pydantic team - free for now Michael: 10% off the new spaCy course throughout May Joke: Evolution of smart products