Planet Python
Last update: December 06, 2025 07:44 AM UTC
December 05, 2025
Real Python
The Real Python Podcast – Episode #276: Exploring Quantum Computing & Python Frameworks
What are the recent advances in the field of quantum computing and high-performance computing? And what Python tools can you use to develop programs that run on quantum computers? This week on the show, Real Python author Negar Vahid discusses her tutorial, "Quantum Computing Basics With Qiskit."
December 05, 2025 12:00 PM UTC
Mark Dufour
Shed Skin restricted-Python-to-C++ compiler v0.9.11
December 05, 2025 03:08 AM UTC
December 03, 2025
Caktus Consulting Group
LLM Basics: Ollama Function Calling
In our previous post, we introduced function calling and learned how to do it with OpenAI’s LLMs.
In this post, we’ll call the same cactify_name function from that post using Meta’s
Llama 3.2 model, installed locally using Ollama. The techniques in this post should also work
with other Ollama models that support function-calling.
December 03, 2025 04:42 PM UTC
Real Python
How to Use Google's Gemini CLI for AI Code Assistance
Learn how to use Gemini CLI to bring Google's AI-powered coding assistance directly into your terminal to help you analyze and fix code.
December 03, 2025 02:00 PM UTC
Django Weblog
Django 6.0 released
The Django team is happy to announce the release of Django 6.0.
The release notes assembles a mosaic of modern tools and thoughtful design. A few highlights are:
- Template Partials: modularize templates using small, named fragments for cleaner, more maintainable code. (GSoC project by Farhan Ali Raza, mentored by Carlton Gibson)
- Background Tasks: run code outside the HTTP request-response cycle with a built-in, flexible task framework. (Jake Howard)
- Content Security Policy (CSP): easily configure and enforce browser-level security policies to protect against content injection. (Rob Hudson)
- Modernized Email API: compose and send emails with Python's EmailMessage class for a cleaner, Unicode-friendly interface. (Mike Edmunds)
You can get Django 6.0 from our downloads page or from the Python Package Index.
The PGP key ID used for this release is Natalia Bidart: 2EE82A8D9470983E
With the release of Django 6.0, Django 5.2 has reached the end of mainstream support. The final minor bug fix release, 5.2.9, was issued yesterday. Django 5.2 will receive security and data loss fixes until April 2028. All users are encouraged to upgrade before then to continue receiving fixes for security issues.
Django 5.1 has reached the end of extended support. The final security release, 5.1.15, was issued on Dec. 2, 2025. All Django 5.1 users are encouraged to upgrade to a supported Django version.
See the downloads page for a table of supported versions and the future release schedule.
December 03, 2025 12:00 PM UTC
Real Python
Quiz: How to Use Google's Gemini CLI for AI Code Assistance
Learn how to install, authenticate, and safely use the Gemini CLI to interact with Google's Gemini models.
December 03, 2025 12:00 PM UTC
Talk Python to Me
#529: Computer Science from Scratch
A lot of people building software today never took the traditional CS path. They arrived through curiosity, a job that needed automating, or a late-night itch to make something work. This week, David Kopec joins me to talk about rebuilding computer science for exactly those folks, the ones who learned to program first and are now ready to understand the deeper ideas that power the tools they use every day.
December 03, 2025 08:00 AM UTC
December 02, 2025
Christian Ledermann
Game development with SpecKit, Rust and Bevy
brkrs — a fun, playable brick-breaker game & learning playground
brkrs is a real, playable Breakout/Arkanoid-style game written in Rust 🦀 using the Bevy engine.
It’s also a hands-on learning project, letting you explore:
- Spec-first development with GitHub speckit
- Incremental feature development through issues & PRs
- AI-assisted and agentic coding experiments
Every feature starts as a spec, flows through an issue or PR, and ends as working Rust code. You can play the game, explore the code, and learn modern Rust/Bevy workflows all at the same time.
Linus Torvalds said: “Talk is cheap. Show me the code.”
brkrs lets you play, tinker, and see the specs come alive in a real game.
The Story Behind brkrs
I always wanted to rewrite my old Arkanoid/Breakout-style game, YaAC 🐧, in a modern game framework.
I began by manually implementing the core gameplay foundations: reading documentation, following examples, and building a basic proof-of-concept with the essential mechanics (ball, paddle, bricks).
It quickly became clear that doing everything manually would involve a steep learning curve and a lot of time.
brkrs was born as a solution: a way to learn modern Rust game development, apply spec-first workflows, and experiment with AI-assisted coding, all while still having fun playing a real game.
Try it now
You can play a web version on GitHub Pages
Key Features
brkrs is a Breakout/Arkanoid style game implemented in Rust with the Bevy engine. It extends the classic formula with richer physics, paddle rotation, and per-level configuration.
- Classic Breakout-style gameplay: paddle, ball, bricks, and levels
- Levels are human-readable and easy to modify
- Spec-first workflow: every feature begins as a spec and ends as working Rust code
- Small, incremental PRs demonstrate the development workflow and learning path
- Crate-ready and cross-platform (desktop + WebAssembly builds)
- A fun, approachable way to learn Rust, Bevy, and modern coding practices
Quickstart (play & learn)
Prerequisites: Rust + Cargo + Git
git clone https://github.com/cleder/brkrs.git
cd brkrs
cargo run --release
Controls: move paddle with mouse, scroll wheel to rotate (if enabled), ESC to pause.
Play, tweak, and learn — modify levels, bricks, or mechanics to see specs turn into features.
Core Systems
- Physics (Rapier3D) – 3D physics constrained to a flat play plane.
- Game State – (planned) menu, playing, paused, game over, transitions.
- Level Loader – RON file parsing, entity spawning, per-level gravity.
- Brick System – Extensible brick behaviors via components & events.
- Pause System – ESC to pause, click to resume, with window mode switching (native).
Learning Path & Contribution
This project is intended to be fun and educational. Suggested learning steps:
- Read a spec in the repo or wiki
- Pick a small issue to implement
- Submit a PR that fulfills the spec
- Experiment with AI-assisted features or gameplay tweaks
Documentation
Full documentation is available at brkrs.readthedocs.io:
- Quickstart Guide — Get running in 10 minutes
- Developer Guide — Set up a development environment
- API Reference — Rust API documentation
Why You’ll Enjoy It
- Play a real game while learning coding practices
- Watch specs transform into working features
- Experiment safely with Rust, Bevy, and AI-assisted workflows
- Learn by doing in a hands-on, playful way
December 02, 2025 10:00 PM UTC
PyCoder’s Weekly
Issue #711: pairwise(), Mocks, Claude, and More (Dec. 2, 2025)
December 02, 2025 07:30 PM UTC
Python Morsels
Wrapping text output in Python
Python's textwrap module includes utilities for wrapping text to a maximum line length.
Improving readability with text wrapping
Sometimes programmers like to manually wrap their text to a specific maximum line length.
This is unwrapped free-flowing text (made with a multiline string):
license = """
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
""".strip()
print(license)
When we print this text at the terminal, it will something like this:
$ python3 license.py
Permission is hereby granted, free of charge, to any person obtaining a copy of this softwar
e and associated documentation files (the "Software"), to deal in the Software without restr
iction, including without limitation the rights to use, copy, modify, merge, publish, distri
bute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Soft
ware is furnished to do so, subject to the following conditions:
Let's manually wrap this text to a 78-character line length:
license = """
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
""".strip()
print(license)
When we print this text, we'll now see that it's a bit easier to read in our terminal:
$ python3 license.py
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
How can we do this text wrapping automatically?
Wrapping text to a fixed width with textwrap.wrap
Python's textwrap module has a …
Read the full article: https://www.pythonmorsels.com/wrapping-text/
December 02, 2025 04:00 PM UTC
Nicola Iarocci
Eve 2.2.4
Eve v2.2.4 was just released on PyPI. It is a minor update, with a validation fix contributed by smeng9. See the changelog for details.
December 02, 2025 03:06 PM UTC
Real Python
Introduction to pandas
Learn pandas DataFrames: explore, clean, and visualize data with powerful tools for analysis. Delete unneeded data, import data from a CSV file, and more.
December 02, 2025 02:00 PM UTC
Django Weblog
Django security releases issued: 5.2.9, 5.1.15, and 4.2.27
In accordance with our security release policy, the Django team is issuing releases for Django 5.2.9, Django 5.1.15, and Django 4.2.27. These releases address the security issues detailed below. We encourage all users of Django to upgrade as soon as possible.
CVE-2025-13372: Potential SQL injection in FilteredRelation column aliases on PostgreSQL
FilteredRelation was subject to SQL injection in column aliases, using a suitably crafted dictionary, with dictionary expansion, as the **kwargs passed to QuerySet.annotate() or QuerySet.alias() on PostgreSQL.
Thanks to Stackered for the report.
This issue has severity "high" according to the Django security policy.
CVE-2025-64460: Potential denial-of-service vulnerability in XML serializer text extraction
Algorithmic complexity in django.core.serializers.xml_serializer.getInnerText() allowed a remote attacker to cause a potential denial-of-service triggering CPU and memory exhaustion via specially crafted XML input submitted to a service that invokes XML Deserializer. The vulnerability resulted from repeated string concatenation while recursively collecting text nodes, which produced superlinear computation resulting in service degradation or outage.
Thanks to Seokchan Yoon (https://ch4n3.kr/) for the report.
This issue has severity "moderate" according to the Django security policy.
Affected supported versions
- Django main
- Django 6.0 (currently at release candidate status)
- Django 5.2
- Django 5.1
- Django 4.2
Resolution
Patches to resolve the issue have been applied to Django's main, 6.0 (currently at release candidate status), 5.2, 5.1, and 4.2 branches. The patches may be obtained from the following changesets.
CVE-2025-13372: Potential SQL injection in FilteredRelation column aliases on PostgreSQL
- On the main branch
- On the 6.0 branch
- On the 5.2 branch
- On the 5.1 branch
- On the 4.2 branch
CVE-2025-64460: Potential denial-of-service vulnerability in XML serializer text extraction
- On the main branch
- On the 6.0 branch
- On the 5.2 branch
- On the 5.1 branch
- On the 4.2 branch
The following releases have been issued
- Django 5.2.9 (download Django 5.2.9 | 5.2.9 checksums)
- Django 5.1.15 (download Django 5.1.15 | 5.1.15 checksums)
- Django 4.2.27 (download Django 4.2.27 | 4.2.27 checksums)
The PGP key ID used for this release is Natalia Bidart: 2EE82A8D9470983E
General notes regarding security reporting
As always, we ask that potential security issues be reported via private email to security@djangoproject.com, and not via Django's Trac instance, nor via the Django Forum. Please see our security policies for further information.
December 02, 2025 12:00 PM UTC
Python Software Foundation
Sovereign Tech Agency and PSF Security Partnership
December 02, 2025 07:00 AM UTC
December 01, 2025
Mike Driscoll
ANN: Vibe Coding Video Games with Python
I am happy to announce my latest book, Vibe Coding Video Games with Python. Here’s the announcement from my Kickstarter: Welcome to Vibe Coding Video Games with Python. In this book, you will learn how to use artificial intelligence to create mini-games. You will attempt to recreate the look and feel of various classic video […]
The post ANN: Vibe Coding Video Games with Python appeared first on Mouse Vs Python.
December 01, 2025 04:11 PM UTC
Caktus Consulting Group
LLM Basics: OpenAI Function Calling
In our previous post, we explored how to send text to an LLM and receive a text response in return. That is useful for chatbots, but often we need to integrate LLMs with other systems. We may want the model to query a database, call an external API, or perform calculations.
December 01, 2025 03:00 PM UTC
Real Python
Quantum Computing Basics With Qiskit
Understand quantum computing basics like qubits, superposition, and entanglement. Then use Python Qiskit to build your first quantum circuit.
December 01, 2025 02:00 PM UTC
death and gravity
reader 3.20 released – we're so back
December 01, 2025 01:43 PM UTC
Real Python
Quiz: Quantum Computing Basics With Qiskit
Test your understanding of quantum computing basics, including superposition, qubits, entanglement, and key programming concepts.
December 01, 2025 12:00 PM UTC
Zero to Mastery
[November 2025] Python Monthly Newsletter 🐍
72nd issue of Andrei's Python Monthly: , and much more. Read the full newsletter to get up-to-date with everything you need to know from last month.
December 01, 2025 10:00 AM UTC
Python Bytes
#460 Overlooked Python Typing
Topics include Advent of Code, Django 6 is coming, Advanced, Overlooked Python Typing, and codespell.
December 01, 2025 08:00 AM UTC
Zato Blog
Network Packet Broker Automation in Python
Network Packet Broker Automation in Python

Packet brokers are crucial for network engineers, providing a clear, detailed view of network traffic, aiding in efficient issue identification and resolution.
But what is a network packet broker (NBP) really? Why are they needed? And how to automate one in Python?
➤ Read this article about network packet brokers and their automation in Python to find out more.
More resources
➤ Click here to read more about using Python and Zato in telecommunications
➤ Python API integration tutorials
➤ What is an integration platform?
➤ Open-source iPaaS in Python
December 01, 2025 03:00 AM UTC
Brian Okken
Is Cyber Monday still a thing?
I kinda forgot about CyberMonday.
However, when I saw a bunch of announcements this morning, I figured why not participate.
- The Complete pytest Course bundle
- Use CYBERMONDAY to save 50% off Dec 1 only
- Python Testing with pytest, 2nd edition, eBook
- Pragmatic has left the SAVE50 code up through today.
- Use code SAVE50 to get 50% through Monday, Dec 1
December 01, 2025 12:00 AM UTC
Seth Michael Larson
One weird trick for cheaper physical Switch 2 games?
December 01, 2025 12:00 AM UTC
November 30, 2025
The Python Coding Stack
My Life • The Autobiography of a Python Object
A short post showing Python from the eyes of object 0x101dd38c0

