Planet Python
Last update: October 25, 2026 07:48 AM UTC
October 24, 2026
Go Deh
Finding Flaws in Technical Documentation
October 23, 2026
LernerPython blog, from Reuven Lerner
Pandas offset aliases for resample: ME, MS, and other codes
Using resample in Python Pandas? You’ll want a list of “offset aliases,” the codes that let you specify units. Some are surprising, such as “ME” and “MS” for “month end” […]
The post Pandas offset aliases for resample: ME, MS, and other codes appeared first on LernerPython.
October 22, 2026
Daniel Roy Greenfeld
TIL: How to extract subtitles from video
How I use Python and ffmpeg to create a subtitle file.
Mariatta
Python Core Sprint 2026: Day 3
Day 3 of the Python Core Sprint, yesterday, was my last day in the room. Today I’m traveling to Seattle for SeaGL, where I’m one of the keynote speakers. With the bots settled on Cabotage and Heroku scaled to zero, I had the day for the smaller things that had been waiting on the follow-up list.
A prompt generator for NEWS entries, and why I closed it
One of the open pull requests in blurb_it was #456, from An Long (aisk), opened back in July. It added a button to the “add blurb” page that generates a prompt. The contributor copies the prompt into ChatGPT, Claude, Gemini, or DeepSeek, and pastes the resulting NEWS entry back into blurb_it. The prompt includes links to the issue, the PR, the diff, and the changed files, plus the devguide’s guidance on how to write a NEWS entry.
Rodrigo Girão Serrão
Module profiling overview
Learn about the new module profiling that was introduced in Python 3.15 to organise the built-in profiling tools.
The standard library module profiling organises the built-in profiling tools that Python has into a single namespace.
Introduced in Python 3.15, it gives access to two different profilers: a sampling profiler called Tachyon, and a tracing profiler.
This article will present an overview of those two profilers.
15 days of Python 3.15
To celebrate the release of Python 3.15, over the next 15 business days I'll be writing about a new 3.15 feature every day. Explained clearly and with examples so you don't have to sift through the changelog.
Subscribe to receive this free email series:
If you want, you can also check the schedule of the upcoming emails.
Historical note
Before Python 3.15, Python had a module in the standard library called profile.
The module profile was a pure-Python profiler that was of little practical use.
This module was deprecated in Python 3.15 and is scheduled for removal in Python 3.17.
In addition to the pure-Python module profile, Python 3.14 and earlier included a tracing profiler called cProfile.
This profiler now lives under profiling.tracing and it's one of the tools you'll learn about in this article.
Understanding the two Python profilers
The Python standard library provides two profilers under the module profiling:
profiling.sampling: a statistical profiler that uses high-frequency sampling to profile your code with virtually zero overhead. This profiler is commonly known as Tachyon.profiling.tracing: a tracing profiler that instruments your code to profile your code deterministically but with some overhead. This profiler used to be called cProfile.
The key difference between...
Tryton News
Information regarding eMudhra / emSign CA certificate security incident
Following Information for Python users regarding eMudhra / emSign CA certificate security incident - Announcements - Discussions on Python.org, we have updated the Docker images of Tryton because certifi is an indirect dependency of Tryton.
It is recommended to update your deployment to use the updated images.
If you deploy Tryton using a virtual environment, it must be updated following the instructions.
1 post - 1 participant
Python Software Foundation
Mark Your Calendars! PSF Board Office Hours for the Year Ahead
Peter Hoffmann
Loading 33,000 Peaks on Demand with a z10 Tile Grid
Zero-with-Dot (Oleg Żero)
Text-to-Diagram for AI Systems: Designing a DSL an LLM Gets Right
Gnomon, the DSL from my DevAI 2026 keynote: a Python compiler built on Lark and an ontology, turning talk about a system into a diagram you can check.
October 21, 2026
Jaime Buelta
Jev webinar video
I hosted a webinar on the 20th talking about the Jev model, which is a new AI decision model that works well in responding quickly to simple questions to a particular piece of information. This model has been talked about quite a lot recently when it was introduced, as it helps in a lot of workflows where it can be an alternative that’s faster and cheaper than LLMs. It has also spurred a lot of competing decision models, including of course Open Weights alternatives. You can see the recording of the webinar... Read More
Python Engineering at Microsoft
Pylance + Pyrefly: bring your preferred type checker to Visual Studio Code
Announcing the Type Server Protocol and our partnership with Meta
The post Pylance + Pyrefly: bring your preferred type checker to Visual Studio Code appeared first on Microsoft for Python Developers Blog.
Rodrigo Girão Serrão
Tachyon: sampling profiling in Python
Learn how to use Tachyon, Python's sampling profiler.
“Tachyon” is a new sampling profiler that was introduced in Python 3.15. It provides a CLI that allows running and profiling scripts or attaching to running processes.
Tachyon logoIn this article you'll learn what statistical profiling is and how to use the Tachyon CLI to identify performance bottlenecks in your code.
15 days of Python 3.15
To celebrate the release of Python 3.15, over the next 15 business days I'll be writing about a new 3.15 feature every day. Explained clearly and with examples so you don't have to sift through the changelog.
Subscribe to receive this free email series:
If you want, you can also check the schedule of the upcoming emails.
What is statistical profiling
Statistical profiling is the practice of profiling your code by periodically taking snapshots of the state of your Python program. Since you're periodically snapshotting the call stack of your program, you call Tachyon a sampling profiler.
Tachyon collects all of its samples over a profiling run and uses it to estimate how much time is being spent in each part of your code.
Suppose Tachyon collects 1,000,000 samples over the course of 10 seconds.
Out of those 1,000,000 samples, assume 25,000 samples (2.5%) show the function foobar.
Tachyon estimates that you spent 2.5% of the 10 seconds, or 250 miliseconds, inside the function foobar.
The longer Tachyon runs, and the higher its frequency (the shorter the interval between snapshots), the more accurate the results that Tachyon produces.
Using the Tachyon CLI
Tachyon is the “cool” name for the module profiling.sampling from the standard library.
Since it's a module...
Mariatta
Python Core Sprint 2026: Day 2
Day 2 of the Python Core Sprint was all about one thing for me: moving our GitHub bots, bedevere, blurb_it, and miss-islington, off Heroku and onto the PSF’s Cabotage. Monday was prep. Yesterday was the switch.
The facts first. The downtime was announced for 11 AM to 12 noon Pacific. Here is how it went, in Pacific time:
- 11:00 AM: posted on Discord that the downtime was starting.
- 11:35 AM: bedevere switched over to Cabotage.
- 12:08 PM: miss-islington switched over.
- 12:17 PM: first backport created on Cabotage.
- 12:36 PM: updated the Discourse thread to say “This is now completed.”
Zachary Ware commented that it sounded like it went very smoothly.
Python Insider
Python 3.15.1, 3.14.9 and 3.13.17 are out
Three certified security releases for 3.15, 3.14 and 3.13.
October 20, 2026
PyCoder’s Weekly
Issue #757: Django Migrations, Functional Programming, MVC, and More (2026-10-20)
Python Bytes
#501 A Nod to Sir-Mix-Alot
Topics include Nod: pause your Python program and open a notebook at any line, Polars 2.0 ships: streaming engine by default, spill-to-disk, and a row-order gotcha, django-cachalot caches your ORM queries and invalidates them for you, and Towards async transactions in Django.
Rodrigo Girão Serrão
DX improvements in Python 3.15
Learn about the top 3 developer experience improvements from Python 3.15
This article covers the top 3 improvements made to the developer experience of Python 3.15 users:
- improved error messages
- more colours
- default UTF-8 encoding
15 days of Python 3.15
To celebrate the release of Python 3.15, over the next 15 business days I'll be writing about a new 3.15 feature every day. Explained clearly and with examples so you don't have to sift through the changelog.
Subscribe to receive this free email series:
If you want, you can also check the schedule of the upcoming emails.
Improved error messages
Over the past few years, lots of effort has been poured into improving Python's error messages. Python 3.15 is no exception, as it introduces three improved types of error messages.
Errors in accessing nested attributes
If you get an AttributeError exception when accessing a name of an object, but that object has another member that has the correct name, Python suggests it:
class Inner:
def __init__(self):
self.value = 42
class Outer:
def __init__(self):
self.inner = Inner()
o = Outer()
o.value
# AttributeError: 'Outer' object has no attribute 'value'.
# Did you mean '.inner.value' instead of '.value'?
Incidentally, while Python 3.15 was in alpha, I found and reported a bug with this feature that was fixed in just a couple of hours!
Checking methods from popular programming languages
If you get an AttributeError when trying to access a method from a built-in type, Python starts by checking if that's a typo.
For example, list.pp will ask if you meant to type list.pop.
Now, if there's no “obvious” typo, Python will also check a static table of common...
Mariatta
Python Core Sprint 2026: Day 1
This week I’m in San Francisco for the annual Python Core Sprint. This year the sprint is hosted by Brandt Bucher from OpenAI, at OpenAI’s office, and runs Monday to Friday, October 19 to 23. I’m only here for the first three days. On Thursday I fly out to Seattle for SeaGL, where I’m one of the keynote speakers :)
I could not make it to last year’s sprint at Arm in Cambridge, UK, and it is unlikely I’ll be able to make it to next year’s European sprint either, so I’m glad this one is on the West Coast and within reach. The sprint is one of the very few times in a year when this many Python core team members are in the same room, focused on nothing but Python. It is still one of my favorite Python events of the year. Thank you to Brandt and OpenAI for hosting us!
Python Software Foundation
Wikis: Relaunched!
LernerPython blog, from Reuven Lerner
Pandas DatetimeIndex slicing: Fix KeyError with sort_index
Slice an unsorted datetime index in Python Pandas, and you’ll likely get: KeyError: ‘Value based partial slicing on non-monotonic DatetimeIndexes with non-existing keys is not allowed.’ Why? If the dates […]
The post Pandas DatetimeIndex slicing: Fix KeyError with sort_index appeared first on LernerPython.
Seth Michael Larson
Documenting certificate distribution pain points for the Python ecosystem
PyCon Ireland
Schedule for PyCon Ireland 2026
The sessions, speakers, and workshops for PyCon Ireland 2026 are now available. Buy a ticket and join us in Dublin on 21 November.
October 19, 2026
Rodrigo Girão Serrão
Startup configuration files
Learn how to use startup configuration files to run package entry points when the Python interpreter starts up.
A startup configuration file is a file with the extension .start.
Starting from Python 3.15, the Python interpreter uses startup configuration files to run package entry points when the interpreter starts up.
Here is an example of a simple startup configuration file that installs error-links when the Python interpreter starts:
error_links:install
The entry point error_links:install from the above points to the function install from the module error_links.
In general, an entry point resembles an import:
- the import path
- followed by a colon
- followed by the callable that gets called
For the entry point error_links:install, the equivalent import would be from error_links import install.
The module site and some historical context
The module site, from the standard library, is imported automatically when the Python interpreter starts up.
When imported, the module site does a couple of things.
Among them, it adds some paths to the module search path and then checks them for configuration paths.
In Python 3.14 or earlier, configuration files were .pth files.
.pth files can be used to extend sys.path by listing directories.
Alongside that, and for backwards compatibility reasons, .pth files could also include import lines.
import lines in a .pth represent a security risk, so PEP 829 introduced a safer way of running custom hooks during Python interpreter start up.
import lines in .pth files are now deprecated and Python 3.15+ also looks for .start files to run the listed entry points.
Python 3.15 brings much more to the table
From the two new built-ins frozendict and sentinel, to lazy imports, package startup configuration files, typing improvements, or more colour everywhere, Python 3.15 has a lot more to offer.
If you want to learn more about what's new in Python 3.15, take a look at the “15 days of Python 3.15” series I'm running.
For 15 days, I'll explain a new Python 3.15 feature every day.
Get the free 3.15 email series:
Django Weblog
Quarterly contributor outreach
Hi Django community, thank you all for continuing to contribute to Django.
The Steering Council is reaching out to bring people's attention to a few areas. We have major features we'd like to test and review for 6.2, smaller changes that could use attention and then various New Feature ideas we'd like community input on.
Major features
These PRs are things we'd like to refine, test and get merged in. We're looking for people to test the features themselves and review the PRs. Please see our guidelines on reviewing PRs.
CompositeField(multi-column subqueries)- Only needs testing, not review.
DEFAULT_PK_FIELDsetting (e.g. UUID primary keys)- Move models between apps
Sage Abdullah has a great Django London talk on how to test your project against Django's main branch. Please note that you would need to change the branch to point to the PR’s specific branch.
Other features
These are other PRs that we thought would be cool to have included in 6.2. They are in various states of refinement. We're looking for people to test and review the PRs. They are smaller in nature, so it may be easier to get involved here.
- Adding
QuerySet.executed_queries - Partitioned cookies
- Support for the HTTP QUERY method
- Improve CSRF debug messaging behind proxies
New Features
This section is bringing attention to the New Features queue. Ideas are in various stages and require different types of input. With over 150 ideas so far, we'll try to provide direction for those who have limited time to participate.
Ideas needing technical vetting [medium+ effort]
These are ideas the community would like integrated, but we need contributor opinion on. The links are to proposals that could use vetting.
- Ability to customize model Meta and migration generation
- Implement modern CSRF protection
- Add timeout API for tasks
- Subresource integrity (SRI)
- Adding import maps to Django
Ideas needing community input [low effort]
We encourage people to review the entire New Feature queue and use the emoji reactions. Please use the 😕 emoji to register a "saw this, but have no opinion". This helps us understand what has been reviewed by the community. We have selected a few from the list that we'd like people to weigh in on:
- Better hooks to customize
PasswordResetFormemail sending - Add PR help in Working with Git GitHub contribution documentation
- Service URL parsing in core (e.g. database and cache URLs)
- Standardise Task execution order
- Update
AuthenticationMiddlewareto delegate to Authentication Backends - Support sending to Unicode email addresses via SMTP
Thank you
Django is built by the community and every bit helps move Django forward. We encourage everyone to feel empowered to participate. If you aren't sure where to start or have questions, ask on the Django Forum or in the Django Discord. We're happy to help you find your way in.
- The Django Steering Council
Hugo van Kemenade
Releasing Python 3.15.0
Prologue #
Like last year, I livetooted the release of Python 3.15.0. Here it is in blogpost form!
Two weeks #
Two weeks until Python 3.15.0 final!
#Python
#Python315
Fri, Sep 18, 2026, 00:30 EEST
One week #
One week until Python 3.15.0 final!!
What are you most looking forward to?
#Python
#Python315
Tue, Sep 22, 2026, 21:17 EEST
Python 3.15.0 release day! #
First blocker, we’re getting 503s on docs.python.org and buildbot.python.org, the latter of which is needed to check the tier 1 and 2 buildbots are passing, needed for a release.
It’s a certificate issue from an incompatible pyOpenSSL upgrade. We’re waiting for the US to wake up and poke it with a stick.
#Python
#Python315
Thu, Oct 1, 2026, 14:19 EEST
Red #
The US woke up and they’re both back up!
Now, there’s one tier 1 failure to check.
#Python
#Python315
#release
Thu, Oct 1, 2026, 14:22 EEST
Flaky #
RuntimeError: join took too long: <Process name='Process-2107' pid=2290504 parent=2276730 started daemon>
Looks like a flaky test, and python/cpython#157184 has a fix to increase a timeout. Will try restarting for now.
#Python
#Python315
#release
Thu, Oct 1, 2026, 14:25 EEST
Green #
That passed, the buildbots are back to green ✅️
Next, issues/PRs with release-blocker label.
One is a straightforward docs update, I marked as blocker so I don’t forget, to change future tense to present.
Then three last-minute lazy import blockers that need a closer look.
#Python
#Python315
#release
Thu, Oct 1, 2026, 15:11 EEST
Traditional surprise rc3 #
Following recent tradition, I’m going to add a surprise third release candidate!
It makes sense to include the last-minute lazy-import fixes in 3.15.0 final.
It also makes sense to give time to test them properly, so today’s planned 3.15.0 final is postponed, and I’m going to release a 3.15.0rc3 tomorrow, assuming everything is in place.
And then 3.15.0 final will follow about week later. Exact date to be announced.
We’re nearly there! 🤞
#Python
#Python315
#release
Fri, Oct 2, 2026, 00:49 EEST
Missing backport #
The three lazy blockers are finally merged into main, two have been backported to
3.15, but wait, the third failed,
because it depends on some tests not yet backported.
Okay, backport created, merge conflict fixed, CI is now spinning, and automerge enabled. That’ll merge in about 15 mins, then we can update it into the last blocker PR, that should merge about 30 mins later, and rc3 can begin!
#Python
#Python315
#release
Fri, Oct 2, 2026, 20:58 EEST
rc3 #
Get yer rc3 here!
You know the drill: please test and report bugs!
Library maintainers, join the Cool Testers’ Club 😎 and add 3.15 to your test matrix.
Python 3.15.0 final planned for 2026-10-09.
#Python
#Python315
#release
Sat, Oct 3, 2026, 00:14 EEST
Python 3.15.0 release day (second attempt)! #
✅️ Release date updated in What’s New in Python 3.15
✅️ No release blockers
✅️ No deferred blockers
✅️ Buildbots all green
#Python
#Python315
#release
Fri, Oct 9, 2026, 13:03 EEST
Cooldowns #
Pydantic finally added support for Python 3.15 yesterday, and aiohttp on Monday, so I could use Python 3.15 rc3 to run the release scripts and release Python 3.15.0 final!
But… I’m going to respect our seven-day cooldown, and stick with 3.14.
You also use cooldowns for your dependencies, right?
#Python
#Python315
#release
Fri, Oct 9, 2026, 13:12 EEST
blurb bug #
Pushing the big launch button:
.venv/bin/python run_release.py --repository ../cpython --ssh-user hugovk --release 3.15.0
… and immediately ran into a bug with our changelog tool blurb, because we’ve had no
new NEWS fragments since rc3 :)
This needs a fix in blurb, a new PyPI release, and then the docs lockfile regenerated and backported to 3.15.
Fix PR: python/blurb#92
#Python
#Python315
#release
Fri, Oct 9, 2026, 13:43 EEST
blurb fix #
OK, merged and released (really easy using Trusted Publishing), lockfile updated and backported.
Restarted the release and that’s better now.
A temporary branch and tag has been pushed to my fork, and I need to verify the release commit does not contain any unexpected changes.
All looks good. Next to start the installer and artifact builds.
#Python
#Python315
#release
Fri, Oct 9, 2026, 14:21 EEST
Installers #
The release artifact build failed, need to bump blurb in that lockfile too.
Like this: python/release-tools#451
Now restarted that workflow with the existing CPython tag, no need for retag.
This builds source+docs tarballs and Android+iOS artifacts. Takes ~30 mins.
Ned Deily has started the macOS installer builds. And I’ve started the Windows installer builds, takes ~2 hours.
#Python
#Python315
#release
Fri, Oct 9, 2026, 14:56 EEST
SBOM #
In the meantime, the GitHub Actions build has finished, SBOMs created and some things uploaded.
The Windows process has paused a couple of times, awaiting button clicks to approve signing of binaries. The whole release team gets emails about this, so no sneaking out signed releases. 🥷
#Python
#Python315
#release
Fri, Oct 9, 2026, 16:04 EEST
Nearly there #
Windows complete, tags pushed upstream, Sigstore signing done, adding files to python.org… nearly there…
#Python
#Python315
#release
Fri, Oct 9, 2026, 17:11 EEST
Out now #
🐍🚀 Out now: Python 3.15.0 final!
💤 Lazy imports!
🧊 frozendict builtin!
💂 sentinel builtin!
📉 Tachyon
profiler!
🖼️ Frame pointers everywhere!
🛅 Unpacking in comprehensions!
🗣️
UTF-8 as the default encoding!
🛞 Stable ABI for free-threading!
🆕 Package
startup config files!
⌨️ TypedDict & TypeForm!
🐎 Faster JIT!
🎨 More
colour!
🚌 & more!
Huge thanks to the Sovereign Tech Agency supporting my work as release manager and enabling another smooth release!
#Python
#Python315
#CPython
#release
Fri, Oct 9, 2026, 17:23 EEST
It’s not over yet! #
I updated PEP 790, which also updates the PEPs API, which is used to point the docs at /3/ to 3.15, kicked off a docs build: docs.python.org/3/
Unpin one toot and pin another to my profile.
(3.14 might not be the newest, but we can still celebrate with pie!)
And then unlock the 3.15 branch so the core team can start merging 185 PRs that didn’t get in during RC.
#Python
#Python315
#release
Fri, Oct 9, 2026, 18:27 EEST
Also #
✅️ update 3.15 label
✅️ rebuild devguide
to update: devguide.python.org/versions/
✅️
unlock 3.15 branch
And I think that’s it!
Hey, @savannah, you’re up next with the first 3.16 alpha on Tuesday! 🚀
#Python
#Python315
#Python316
#release
Fri, Oct 9, 2026, 18:58 EEST
