skip to navigation
skip to content

Planet Python

Last update: October 30, 2025 01:43 PM UTC

October 30, 2025


Zero to Mastery

[October 2025] Python Monthly Newsletter 🐍

71st issue of Andrei's Python Monthly: Customizing Your Python REPL, AI Coding Trap, and much more. Read the full newsletter to get up-to-date with everything you need to know from last month.

October 30, 2025 01:43 PM UTC


Ned Batchelder

Side project advice

Last night was a Boston Python project night where I had a good conversation with a few people that was mostly guided by questions from a nice guy named Mark.

How to write nice code in research

Mark works in research and made the classic observation that research code is often messy, and asked about how to make it nicer.

I pointed out that for software engineers, the code is the product. For research, the results are the product, so there’s a reason the code can be and often is messier. It’s important to keep the goal in mind. I mentioned it might not be worth it to add type annotations, detailed docstrings, or whatever else would make the code “nice”.

But the more you can make “nice” a habit, the less work it will be to do it as a matter of course. Even in a result-driven research environment, you’ll be able to write code the way you want, or at least push back a little bit. Code usually lives longer than people expect, so the nicer you can make it, the better it will be.

Side projects

Side projects are a good opportunity to work differently. If work means messy code, your side project could be pristine. If work is very strict, your side project can be thrown together just for fun. You get to set the goals.

And different side projects can be different. I develop coverage.py very differently than fun math art projects. Coverage.py has an extensive test suite run on many versions of Python (including nightly builds of the tip of main). The math art projects usually have no tests at all.

Side projects are a great place to decide how you want to code and to practice that style. Later you can bring those skills and learnings back to a work environment.

Forgive yourself

Mark said one of his difficulties with side projects is perfectionism. He’ll come back to a project and find he wants to rewrite the whole thing.

My advice is: forgive yourself. It’s OK to rewrite the whole thing. It’s OK to not rewrite the whole thing. It’s OK to ignore it for months at a time. It’s OK to stop in the middle of a project and never come back to it. It’s OK to obsess about “irrelevant” details.

The great thing about a side project is that you are the only person who decides what and how it should be.

How to stay motivated

But how to stay motivated on side projects? For me, it’s very motivating that many people use and get value from coverage.py. It’s a service to the community that I find rewarding. Other side projects will have other motivations: a chance to learn new things, flex different muscles, stretch myself in new ways.

Find a reason that motivates you, and structure your side projects to lean into that reason. Don’t forget to forgive yourself if it doesn’t work out the way you planned or if you change your mind.

How to write something people will use

Sure, it’s great to have a project that many people use, but how do you find a project that will end up like that? The best way is to write something that you find useful. Then talk about it with people. You never know what will catch on.

I mentioned my cog project, which I first wrote in 2004 for one reason, but which is now being used by other people (including me) for different purposes. It took years to catch on.

Of course there’s no guarantee something like that will happen: it most likely won’t. But I don’t know of a better way to make something people will use than to start by making something that you will use.

Other topics

The discussion wasn’t as linear as this. We touched on other things along the way: unit tests vs system tests, obligations to support old versions of software, how to navigate huge code bases. There were probably other tangents that I’ve forgotten.

Project nights are almost never just about projects: they are about connecting with people in lots of different ways. This discussion felt like a good connection. I hope the ideas of choosing your own paths and forgiving yourself hit home.

October 30, 2025 10:23 AM UTC


Django Weblog

Django is now a CVE Numbering Authority (CNA)

We’re proud to announce the Django Software Foundation has been authorized by the CVE Program as a CVE Numbering Authority (CNA)! 

What it means for Django to be a CNA

Our security team deals with vulnerability reports on a daily basis, and every so often some turn out to be real vulnerabilities for us to fix and publish. CNAs are organizations responsible for the regular assignment of CVE IDs to vulnerabilities, and for creating and publishing information about the vulnerability in the associated CVE Record. Each CNA has a specific scope of responsibility for vulnerability identification and publishing. As a CNA, we are more autonomous through this process. For full details, see our scope on the new CVE Numbering Authority page.

How to report a vulnerability

For reporters, our process remains completely unchanged: to report a security issue in Django, please follow our security policies to report over email at security@djangoproject.com.

How our CNA operates

Our CNA is currently run within our existing security team, with support from the foundation’s President and Vice President. Day to day, the Django Fellows take care of CNA activities. Check our CNA page for more information and ways to contact us about CNA matters.

—

Thank you to Natalia Bidart for initiating our application process to become a CNA! And if you have feedback or questions, come say hi on the Django forum in Django as a CNA.

October 30, 2025 08:48 AM UTC

DSF member of the month - Anna Makarudze

Due to the Malcolm Tredinnick Memorial Prize announcement in September, we paused our regular DSF Member of the Month feature for that month.


For October 2025, we welcome Anna Makarudze as our DSF member of the month! ⭐

Anna is a Django Girls+ Trustee and has dedicated years to growing Django globally. She served as DSF President and founded DjangoCon Africa, helping expand Django's reach in the world. She has been a DSF member since August 2016. You can learn more about Anna by visiting Anna's Linkedin profile and her GitHub Profile.

Let’s spend some time getting to know Anna better!

Can you tell us a little about yourself (hobbies, education, etc)

I graduated with a BSc (Hons) in Computer Science from Midlands State University, Gweru, Zimbabwe, many years ago (2009). I am now pursuing an MSc in Software Engineering at Blekinge Institute of Technology in Karlskrona, Sweden, courtesy of a scholarship from the Swedish Institute. I have completed numerous courses for various IT certifications over the years, most of which have expired. I have also taken management courses to keep upskilling myself, as I enjoy learning.

Regarding hobbies, I enjoy baking, especially trying out new cake and pastry recipes for fun; it's my favourite way to relax after busy or stressful times. I also enjoy walking, particularly in areas with lush greenery and natural beauty, but my fear of snakes and creepy crawlies limits my solo adventures into the woods. My fear of snakes is justified; my family home (parents’) is located within a very natural reserve with many indigenous trees and forests, close to Lake Kyle in Masvingo. Although the area is stunning, it does have snakes and other wildlife such as hippopotamuses and crocodiles (if you go too close to the lake). I have encountered snakes many times at my parents’ house because of the numerous trees, so I have learnt to avoid them as most are venomous. Additionally, being African, a fear of these creatures and death is instinctive for me. I also enjoy listening to music, reading books, and occasionally watching a good film.

How did you start using Django?

I learnt Python in 2015 through Treehouse as part of a scholarship from Muzinda Hub’s Entrepreneurship training. We were expected to develop a Python project at the end of the three-month course, and I chose to use Flask. A friend of mine, Humphrey Butau, used Django, and he encouraged me to try it. After that, I was hooked.

What other framework do you know and if there is anything you would like to have in Django if you had magical powers?

I also know Flask, and recently, through school assignments, I have had to use Express JS. If I had magical powers, I would want Django to support NoSQL databases like MongoDB out of the box, just as it supports SQL databases. I have been working with the django-mongodb-backend and realised that it works if you either download their template or do some extra work to be able to run the default Django migrations.

What projects are you working on now?

As part of my Master’s studies, I am actually working on quite a number of projects for the two courses I am currently taking (until 31st October). For the Software Evolution and Maintenance course, we have been working on Home Assistant, which is also based on Python. We are working on a fork, though, so that we don’t flood the upstream with pull requests from Python, but it has been amazing seeing all the integrations available in it. My group and I chose to work on the Google Tasks integration. I will likely want to continue experimenting with Home Assistant even after the course ends.

For the Cloud Computing and Big Data Analysis course I am undertaking, I have recently completed two projects: one involving provisioning and orchestration of two RESTful Django microservices with Kubernetes, and another focused on Big Data Analysis using Express JS. Currently, I am working on implementing monitoring for an application that utilises Clojure and a MongoDB database, although I intend to develop the monitoring in Python.

Besides that, I am personally developing a MongoDB version of a Conveyances app I created several years ago, which was built using Django, Django Rest Framework, Vue, and Postgres. The app had nested data due to the restrictions of a SQL database structure, so I want to experiment with NoSQL to see how simpler it would be. I had meant to do this before DjangoCon Africa and present a talk on it, but the toll of organising a conference blocked me, so I am finally working on it now.

What are you learning about these days?

I am currently learning about cloud computing and Big Data, with a focus on provisioning and orchestrating Big Data Analysis cloud architectures. I am also learning how to improve and monitor the performance of these systems in terms of CPU, memory, and storage utilisation.

Which Django libraries are your favourite (core or 3rd party)?

My favourite Django core libraries are the Django ORM and Django Admin. They make it very easy to set up a functional website with minimal effort. The ORM simplifies database connections and queries, and Django Admin provides a ready-to-use backend admin interface. My favourite third-party library is Django Rest Framework. It makes creating RESTful APIs with Django quick and straightforward.

What are the top three things in Django that you like?

The top three things that I like in Django are the management commands, migrations and the authentication systems. I like how the management commands make it so easy to quickly automate stuff, whether it's the default Django management commands or if you have written your own. Django migrations do the work for you in terms of making changes to the database, and you need not worry about writing the SQL statements.

The authentication system is fairly basic, but it can get you started with minimal effort on your part. This makes Django fulfil its tagline of being “The framework for perfectionists with deadlines”. I have used it in most of my projects for my Master’s programme, where we were chasing deadlines, and it always turned out to be true.

You were previously a board member and President of the Django Software Foundation, what would you suggest to someone wondering if they should take this role or being part of the board?

Being part of the Django Software Foundation board is an excellent way to contribute to the Django community, as you can shape and influence important decisions related to Django and its ecosystem. While the DSF Board does not dictate the technical direction of Django, it does influence how those who impact the technical direction are selected or governed.

As President, you also have the chance to implement your ideas on the future of the Django community, the staff who maintain Django, and the direction of Django events. Although it may require more of your time than being an ordinary member due to additional responsibilities, it is a valuable opportunity to develop and strengthen your leadership skills.

Anyone who uses Django, even if they haven't contributed code but have attended or organised Django events, can be part of the DSF board. I joined the DSF board at the end of 2017 for 2018, after using Django for just over two years, so you need not worry about your level of experience. All you need is your commitment and a clear plan of what you hope the DSF board should achieve during your term.

You were the chair of DjangoCon Africa this year, what do you think is required to organize a conference like this? Why do you think this is important conference like DjangoCon Africa?

Organising a conference like DjangoCon Africa requires substantial community engagement, significant time, effort, and resilience. Firstly, Africa differs from other continents in many ways. In some aspects, these differences are advantageous, while in others, they present challenges. Technologically, Africa is a greenfield; there is ample opportunity for technological advances, and we have the population to pursue this, meaning most of our attendees are eager to learn and contribute to the community. We also have the “Ubuntu” community spirit ingrained within us, which makes our DjangoCon Africa events feel like home.

However, this presents a significant challenge regarding funding, as there are not many successful Django-based startups capable of financing an event as large as DjangoCon Africa. Our colonial history as a continent creates major obstacles to international financial transactions, mainly due to numerous structural barriers. This makes it notably harder for corporate sponsors without local offices to offer sponsorship.

Despite these challenges, I believe it is essential to organise DjangoCon Africa because it is the only continent where many Africans can travel visa-free or without restrictions. My first DjangoCon events were in Europe and then the US, and I have faced numerous visa applications each time I needed to travel. Within Africa, I can visit many countries visa-free. Once I arrive, I am often mistaken for a local until I speak, and then I am limited to speaking English, not their local language. DjangoCon Africa's programme is curated specifically for Africans, featuring talks suited to their level of understanding and offering numerous beginner workshops to help them get started, while also catering for mid-level and advanced programmers.

DjangoCon Africa takes over a year to plan, which demands a significant time commitment. When we are halfway through organising it, I ask myself why I keep getting into trouble by arranging a DjangoCon. After each event, I feel tired and exhausted but incredibly fulfilled because of the impact I can see we have achieved from that single occasion. While other events are more polished and well-established, DjangoCon Africa has only hosted two events so far and remains far from perfect, yet I still sense its impact despite all the imperfections. One can only truly understand the feeling of being at DjangoCon Africa if they have attended it.

I know you are a Django Girls+ Trustee, could you tell us a bit more about Django Girls+ and how we could be involved in Django Girls if we are interested?

Django Girls Foundation is a non-profit that empowers women+ to organise free programming workshops for women+ by providing the resources they need. Django Girls+ workshops are one or two-day events where participants are exposed to web development using Python and Django using our popular, beginner-friendly Django Girls Tutorial, which is open source. The participants get to learn at their own pace with the help of coaches.

We also have several open-source resources to help our volunteers run and organise our workshops: the Organiser Manual, Coach Manual, Organiser FAQs and Tutorial Extensions. In the 11 years that Django Girls+ has existed, (put some statistics + links)

There are several ways to get involved with Django Girls+. One can apply to organise a workshop in their city or become a coach at one of our events. They can also contribute to all the resources mentioned above, as well as our open-source website. They can also contribute financially by supporting us through Patreon, donating via PayPal or GitHub Sponsors (put links). If they are corporates, they can reach out to me as the Fundraising Coordinator and we can discuss a partnership. (link to fundraising email).

Django is celebrating its 20th anniversary, do you have a nice story to share?

Being part of the Django community since 2016 has been a blessing in my life. I have travelled to many countries for Python and Django conferences, forming many meaningful friendships that have become essential to me. I have contributed to Django in many ways, and in return, Django has given me so much. I have been able to showcase my leadership qualities through the Django community, and I am grateful to them for allowing me to be myself and celebrate my identity as an African woman who’s passionate about coding and community.

One of my favourite memories from DjangoCon Europe 2018 is taking a pedal boat ride with my good friend Jessica Upani in Heidelberg, right after DjangoCon Europe 2018. We had previously visited a castle, and it had been lovely. While on the boat, Jessica, true to her nature, kept laughing and not taking our safety seriously, while I, on the other hand, was panicking that we might capsize. We had no life jackets, and I was sure I wouldn’t swim well in the river. When we disembarked, I felt relieved and told her I was worried we would capsize and I wouldn’t be able to swim, and she admitted she was worried too. Who does that? With that, I say happy 20th birthday to Django. I have so many fond memories to share from the Django community.

Is there anything else you’d like to say?

The Django community has put in a lot of work to make the environment welcoming for beginners and for everyone, especially minorities. I have made many genuine friends over the years, whom I am always excited to meet again at various community events. I am one of those people who came for the framework and stayed for the community, and I would like to see this continue.

Thanks so much to all the work the DSF board members (past and present) have done all these years. Things move slowly in Djangoland, as Carlton Gibson likes to say, but it has been a great pleasure watching every board build on what the previous boards have started, and I hope to see that continue. Special thanks to all the working groups, members and volunteers that support the DSF - Django is great because of you.


Thank you for doing the interview, Anna !

October 30, 2025 05:00 AM UTC

October 29, 2025


Patrick Altman

How We Continually Deliver Software

We've open-sourced a reusable set of Github Actions that enable us to move fast and continually deliver high quality software.

October 29, 2025 05:57 PM UTC


Antonio Cuni

Inside SPy, part 1: Motivations and Goals

Inside SPyđŸ„ž, part 1: Motivations and Goals

This is the first of a series of posts in which I will try to give a deep explanation ofSPy, including motivations, goals, rules of thelanguage, differences with Python and implementation details.

This post focuses primarily on the problem space: why Python is fundamentally hardto optimize, what trade-offs existing solutions require, and where current approachesfall short. Subsequent posts in this series will explore the solutions in depth. Fornow, let's start with the essential question: what is SPy?

!!! Success "" Before diving in, I want to express my gratitude to my employer, Anaconda, for giving me the opportunity to dedicate 100% of my time to this open-source project.

October 29, 2025 04:37 PM UTC


Real Python

Logging in Python

If you use Python's print() function to get information about the flow of your programs, logging is the natural next step. Create your first logs and curate them to grow with your projects.

October 29, 2025 02:00 PM UTC


Quansight Labs Blog

Exploring & Improving the Thread Safety of NumPy's Test Suite

With the release of free-threaded builds of Python, it's more important than ever to ensure Python code is thread-safe. Here I detail my journey making the NumPy test suite thread-safe over the course of my internship.

October 29, 2025 12:00 AM UTC

October 28, 2025


Python Morsels

__dict__: where Python stores attributes

Most Python objects store their attributes in a __dict__ dictionary. Modules and classes always use __dict__, but not everything does.

Table of contents

  1. A class with some attributes
  2. The __dict__ attribute
  3. Modules have a __dict__ attribute
  4. Classes also have a __dict__ attribute
  5. Accessing the __dict__ attribute
  6. Not all objects have a __dict__ attribute
  7. Inspecting the attributes of any Python object
  8. Most objects store their attributes in a __dict__ dictionary

A class with some attributes

We have a class here, called Product:

class Product:

    def __init__(self, name, price):
        self.name = name
        self.price = price

    def display_price(self):
        return f"${self.price:,.2f}"

And we have two instances of this class:

>>> duck = Product("rubber duck", price=1)
>>> mug = Product("mug", price=5)

Each of these class instances has their own separate data (a name attribute, and a price attribute):

>>> duck.name
'rubber duck'
>>> mug.price
5

Where are these attributes actually stored? Where does their data live?

The __dict__ attribute

Each of these class instances 


Read the full article: https://www.pythonmorsels.com/__dict__/

October 28, 2025 10:15 PM UTC


PyCoder’s Weekly

Issue #706: Quasars, Faking Data, GIL-free Web, and More (Oct. 28, 2025)

October 28, 2025 07:30 PM UTC


Christian Ledermann

Scratching the Itch, Paying the Debt: How Community Keeps Legacy Open Source Projects Alive

Introduction

Every developer has that one project that started as a personal solution and unexpectedly found a life of its own. For me, that was FastKML, a library I built in 2012 to “scratch my own itch.” I needed to embed maps into a website, and at the time, KML was the de facto standard for visualizing geospatial data on the web. GeoJSON existed but was still in its infancy and unsupported by OpenLayers, which was then the best tool for embedding maps.

Other Python libraries for KML existed, but most were either limited in scope, lacked Python 3 support, or didn’t meet my performance needs. Performance was crucial, so I built FastKML using lxml instead of the slower XML DOM used by many contemporaries.

As FastKML evolved, it depended on Shapely for geometry handling, an excellent library, but one that required C extensions and added installation complexity. That led to the birth of PyGeoIf, a pure Python implementation of basic geospatial objects. PyGeoIf aimed to serve as a lightweight, dependency-free substitute for Shapely when users didn’t need all of its advanced geometry operations. The API mirrored Shapely’s closely, making migration as simple as replacing

from pygeoif import ...

with

from shapely import ...

Over the years, both projects aged gracefully, but not without technical debt. They bore the marks of an earlier Python era: Python 2/3 compatibility hacks (at the very beginning Python 2.6 was still in use), missing type hints, and occasionally ambiguous function signatures.

Still, they worked. The test coverage exceeded 95%, bugs were rare, and they continued solving real problems for users long after I had moved on to other roles outside GIS. To my surprise, the packages remained popular; downloads were steady, and employers still asked about them. But I knew the code looked dated, and if I had to review it today, it wouldn’t pass.

Fast forward to 2020. The geospatial landscape had changed; GeoJSON had overtaken KML, Python’s ecosystem had matured, and I had learned a great deal about clean code and maintainability. It was time to modernize these legacy projects for the new decade.

The Need for Change

Modernization wasn’t just a matter of adding type hints or updating syntax, it was about bringing two long-lived projects in line with modern development practices. The original codebases had served well for years, but they were increasingly difficult to extend. Function signatures were ambiguous, internal logic was tangled, and adding new features often caused shotgun surgery, requiring edits across multiple unrelated files.

The Shapely API had evolved too, fully embracing PEP 8 naming conventions and adopting more expressive methods. To remain compatible, PyGeoIf needed to evolve alongside it. Meanwhile, Python itself had transformed: type hints, static analysis, and property-based testing were now standard practice rather than novelty.

Drivers of Change

The single most important motivator was the introduction of type hints in Python. Type annotations have revolutionized how Python code is written, reviewed, and maintained, enhancing readability and catching subtle bugs early through tools like mypy.
The first step was static analysis with tools like mypy, which immediately flagged legacy Python 2 compatibility hacks, ambiguous function signatures, and missing type hints. Extending the tests in tandem ensured that each refactor preserved correctness.

Beyond that, the desire for clearer APIs, more maintainable structures, and modern testing techniques pushed the modernization effort forward. I wanted code that not only worked but was readable, testable, and future-proof.

A Tale of Two Refactors

For PyGeoIf, version 0.7 had been released in 2017. Four years later, in September 2021, I published the first beta of the 1.0 series: fully type-annotated, statically checked with mypy, and tested using property-based testing with Hypothesis and improved tests with mutation testing with MutMut. By September 2022, version 1.0 was stable, and by October 2025, it had matured to version 1.5.

For FastKML, after a long silence since version 0.11 in 2015, I released version 0.12 in September 2021, incorporating long-neglected pull requests and minor improvements. A month later came FastKML 1.0 alpha 1 on PyPI. What I thought would be a quick release became an 18-iteration journey spanning three years, culminating in version 1.0 in November 2024; finally the library I had envisioned years earlier.

Reflecting on Contributions and Community Support

Over the past few years of developing PyGeoIf and FastKML, the journey has been shaped not only by personal effort but also by the support and engagement of the open-source community. One striking example of this has been Hacktoberfest contributions which consistently provided motivation and tangible progress.

These contributions may seem small individually, but collectively they have kept the momentum going. Seeing community members engage with the projects during Hacktoberfest has been a continuing source of encouragement, reminding me that every bit of contribution helps make the software more robust, maintainable, and welcoming to others.

The positive impact goes beyond the specific changes. Hacktoberfest contributions have:

This ongoing collaboration has made the development process more rewarding and sustainable, reinforcing a simple but powerful lesson: in open-source, community engagement isn’t just about code, it’s about inspiration and momentum.

Hacktoberfest contributions aren’t just code, they’re encouragement. They spark incremental improvements, highlight the value of shared effort, and inspire continued development. Seeing others invest their time and ideas in these projects has been a constant source of motivation to keep improving, testing, and refining.

Hacktoberfest and the Power of Community

Developing PyGeoIf and FastKML has been a journey of learning, coding, and refining, but it’s the community contributions, especially during Hacktoberfest, that have truly kept the momentum alive.

October has consistently brought a wave of engagement: pre-commit hooks, bug fixes, minor enhancements, and automated improvements. Each contribution, no matter how small, reinforced the sense of progress and reminded me that open-source thrives on collaboration.

Looking forward, this collaborative energy continues to fuel future features and refinements. Hacktoberfest has proven that even small contributions can make a big difference, both in the code and in the spirit of the community.

October 28, 2025 04:52 PM UTC


Will Kahn-Greene

Open Source Project Maintenance 2025

Every October, I do a maintenance pass on all my projects. At a minimum, that involves dropping support for whatever Python version is no longer supported and adding support for the most recently released Python version. While doing that, I go through the issue tracker, answer questions, and fix whatever I can fix. Then I release new versions. Then I think about which projects I should deprecate and figure out a deprecation plan for them.

This post covers the 2025 round.

TL;DR

Read more
 (7 min remaining to read)

October 28, 2025 02:00 PM UTC


Real Python

Speed Up Python With Concurrency

Learn what concurrency means in Python and why you might want to use it. You'll see a simple, non-concurrent approach and then look into why you'd want threading, asyncio, or multiprocessing.

October 28, 2025 02:00 PM UTC

October 27, 2025


PyCharm

Welcome to the highlights and key takeaways from the recently released Django Developers Survey. Now in its fourth year, this annual collaboration between the Django Software Foundation and PyCharm tabulates responses from over 4,600 Django developers worldwide. If you work with Python and the web more broadly, there’s a lot to learn from what’s happening […]

October 27, 2025 04:40 PM UTC


Real Python

Using Python Optional Arguments When Defining Functions

Learn to use Python's optional arguments to handle variable inputs. Build flexible functions and avoid common errors when setting defaults.

October 27, 2025 02:00 PM UTC


PyCharm

The State of Django 2025

October 27, 2025 12:05 PM UTC


Real Python

Quiz: Using Python Optional Arguments When Defining Functions

Practice Python function parameters, default values, *args, **kwargs, and safe optional arguments with quick questions and short code tasks.

October 27, 2025 12:00 PM UTC


Talk Python to Me

#525: NiceGUI Goes 3.0

Building a UI in Python usually means choosing between "quick and limited" or "powerful and painful." What if you could write modern, component-based web apps in pure Python and still keep full control? NiceGUI, pronounced "Nice Guy" sits on FastAPI with a Vue/Quasar front end, gives you real components, live updates over websockets, and it’s running in production at Zauberzeug, a German robotic company. On this episode, I’m talking with NiceGUI’s creators, Rodja Trappe and Falko Schindler, about how it works, where it shines, and what’s coming next. With version 3.0 releasing around the same time this episode comes out, we spend the end of the episode celebrating the 3.0 release.

October 27, 2025 08:00 AM UTC


Python Bytes

#455 Gilded Python and Beyond

Topics include Cyclopts: A CLI library, The future of Python web services looks GIL-free, Free-threaded GC, and Polite lazy imports for Python package maintainers.

October 27, 2025 08:00 AM UTC

October 26, 2025


Brian Okken

Polite lazy imports for Python package maintainers

If you are a maintainer of a Python package, it’s nice if you pay attention to the time it takes to import your package.

Further, if you’ve got a Python package with multiple components where it’s probable that many users will only use part of the package, then it’s super nice if you set up your __init__.py files for lazy importing.

Previously - lazy importing other packages

In Python lazy imports you can use today, I discussed:

October 26, 2025 03:13 PM UTC


Rodrigo GirĂŁo SerrĂŁo

TIL #135 – Build the Python documentation

Today I learned how to build the Python documentation to preview changes I wanted to make.

If you're not on Windows, all it takes is to run make -C Doc venv htmllive to build the Python documentation locally and to preview it. This command will build the documentation, start a local server to browse the docs, and also watch for changes in the documentation source files to live-reload while you edit!

I needed this because the Python 3.14 documentation for the module concurrent.interpreters had a terrible-looking “See also” callout with elements that were grossly misaligned:

“See also” callout with elements that are grossly misalignedThis makes my want to cry.

However, since I don't know rST, only Markdown, the issue wasn't obvious to me:

.. seealso::

   :class:`~concurrent.futures.InterpreterPoolExecutor`
      combines threads with interpreters in a familiar interface.

    .. XXX Add references to the upcoming HOWTO docs in the seealso block.

   :ref:`isolating-extensions-howto`
       how to update an extension module to support multiple interpreters

   :pep:`554`

   :pep:`734`

   :pep:`684`

After some Googling, turns out the problem is the comment .. XXX Add references.... Since it's indentend four spaces, it's being interpreted as a blockquote! The fix was just deleting a single space from the left of .. XXX ....

However, I did not stop there! I went above and beyond, capitalising the sentences and adding a full stop to the one that didn't have it!

In the end, the “See also” callout was looking better:

“See also” callout with elements that are neatly aligned and with better-looking punctuation and capitalisation.What a work of art.

October 26, 2025 01:44 PM UTC


The Python Coding Stack

Impostors ‱ How Even The Python Docs Get This Wrong* ‱ [Club]

*Spoiler alert: The docs don’t really get it “wrong”

October 26, 2025 08:52 AM UTC

October 25, 2025


Django Weblog

On the Air for Django’s 20th Birthday: Special Event Station W2D

Back in July, we celebrated a very special occasion: Django’s 20th birthday 🎉 To mark the occasion, three amateur radio operators (including myself) spent the next 14 days, operating evenings and weekends, broadcasting a special event call sign: W2D.

Over those two weeks, we completed 1,026 radio contacts with radio operators in 47 geopolitical entities (for example, the continental US, Alaska and Hawaii are considered separate entities). The US Federal Communications Commission (FCC) issues special event "call signs" for these types of events. We selected W2D for 20 years of Django, but the reference to "Web 2.0" during Django's early years was a bonus!

Over 7,000 lookups were counted on a main callsign lookup site as radio operators checked into what W2D was about. Ham radio is a very popular activity, with more than 750,000 licensed hams in the US!

We created a custom certificate inspired by the design of the Django admin interface for those who made contact with us (certificates are common / expected for events like this in the radio hobby). Here is a sample one, other amateurs contacting the event were able to generate/download their own Django admin inspired certificate from a Django site (which does repeat for those who contacted us multiple times):

A sample of the commemorative certificate, inspired by Django’s admin. Operators who made contact can generate and download their own personalized version.

Thank you to the amateur radio operators who made the event possible and of course those who contacted us! Thanks to you this was a fun time for us all. Additionally, thank you to the Django Software Foundation and its members who make the Django Web Framework and its community possible.


A global network of operators calling W2D — from Belgium, the Netherlands, and the US — on 20 meters. The orange dots mark where our signal was received, all transmitted with 30 watts from a simple 63-foot wire antenna.

This screenshot shows 3 other stations (ON7EQ from Belgium, PC2J from the Netherlands, and WA4NFO from the US all calling W2D on "20 meters" (14 MHz, so named because the wavelength would be 20 meters long per wave) All of the orange bubbles in the map show the other stations receiving the signal from W2D being transmitted with 30 watts of RF power. The antenna is an approximately 63 foot long piece of wire running between a balcony and a fence post.

The map of the world, dotted with the locations of every country or region we contacted. Each dot represents a unique geopolitical entity, and the color intensity reflects the number of contacts made there.

This map shows approximate locations of each geopolitical entity worked during the special event and a count of contacts made in each.


Check out our birthday website for more events – up next, PyDay + Cumple Django organized by PyLadies Colombia in BogotĂĄ 🇹🇮 đŸ’›đŸ’™â€ïž

October 25, 2025 05:53 PM UTC

October 24, 2025


Giampaolo Rodola

Wheels for free-threaded Python now available in psutil

With the release of psutil 7.1.2, wheels for free-threaded Python are now available. This milestone was achieved largely through a community effort, as several internal refactorings to the C code were required to make it possible (see issue #2565). Many of these changes were contributed by Lysandros Nikolaou 


October 24, 2025 10:00 PM UTC


Real Python

The Real Python Podcast – Episode #271: Benchmarking Python 3.14 & Enabling Asyncio to Scale

How does Python 3.14 perform under a few hand-crafted benchmarks? Does the performance of asyncio scale on the free-threaded build? Christopher Trudeau is back on the show this week, bringing another batch of PyCoder's Weekly articles and projects.

October 24, 2025 12:00 PM UTC