Planet Python
Last update: September 10, 2025 04:43 PM UTC
September 10, 2025
Real Python
How to Drop Null Values in pandas
Learn how to use .dropna() to drop null values from pandas DataFrames so you can clean missing data and keep your Python analysis accurate.
September 10, 2025 02:00 PM UTC
Quiz: How to Drop Null Values in pandas
Quiz yourself on pandas .dropna(): remove nulls, clean missing data, and prepare DataFrames for accurate analysis.
September 10, 2025 12:00 PM UTC
Quansight Labs Blog
Scaling asyncio on Free-Threaded Python
A recap on the work done in Python 3.14 to enable asyncio to scale on the free-threaded build of CPython.
September 10, 2025 12:00 AM UTC
September 09, 2025
PyCoder’s Weekly
Issue #698: Capturing Stdout, REPL Color, Feature History, and More (Sept. 9, 2025)
September 09, 2025 07:30 PM UTC
Real Python
Python String Splitting
Master Python string splitting with .split() and re.split() to handle whitespace, delimiters and multiline text.
September 09, 2025 02:00 PM UTC
Python⇒Speed
Testing the compiler optimizations your code relies on
September 09, 2025 12:00 AM UTC
September 08, 2025
Python Morsels
Python REPL Shortcuts & Features
Discover the new Python REPL features introduced in Python 3.13. From keyboard shortcuts to block navigation, this reference guide will help you better utilize Python's interactive shell.
Table of contents
Python REPL Keyboard Shortcuts
Let's start with the keyboard shortcuts the new Python REPL supports. This table is organized with the most useful shortcuts at the top.
Shortcut | Type | Action | OS Support |
---|---|---|---|
Left |
Navigation | Go left one character | All |
Right |
Navigation | Go right one character | All |
Up |
Navigation | Previous block or line | All |
Down |
Navigation | Next block or line | All |
Ctrl+L |
Feature | Clear screen | All |
Ctrl+C |
Feature | Cancel / interrupt | All |
Ctrl+D |
Exit | Exit REPL (Sends EOF) | Linux/Mac |
Ctrl+Z Enter |
Exit | Exit REPL (Sends EOF) | Windows |
Tab |
Feature | Autocompletion | All |
Alt+Enter |
Feature | Run current code block | All |
Ctrl+R |
Feature | Search upward in history | All |
Ctrl+A |
Navigation | Go to beginning of line | Linux/Mac |
Home |
Navigation | Go to beginning of line | All |
Ctrl+E |
Navigation | Go to end of line | All |
End |
Navigation | Go to end of line | All |
Ctrl+K |
Deletion | Delete to end of line | All |
Ctrl+U |
Deletion | Delete to start of line | All |
Ctrl+Left |
Navigation | Go back one word | All |
Alt+B |
Navigation | Go back one word | All |
Ctrl+Right |
Navigation | Go forward one word | All |
Alt+F |
Navigation | Go forward one word | All |
Alt+Backspace |
Deletion | Delete to start of word | All |
Ctrl+W |
Deletion | Delete to start of word | All |
Alt+D |
Deletion | Delete to end of word | All |
F2 |
Feature | Enter history mode | All |
F3 |
Feature | Enter paste/edit mode | All |
F1 |
Feature | Enter help mode | All |
Ctrl+A
does not work in the usual Windows Command Prompt or Powershell (it selects all text instead) unless they are run within the new Windows 10 Terminal app.
On Linux and Mac, Ctrl+D
can be used to exit the REPL, but on Windows you'll need to press Ctrl+Z
and then press Enter
afterward (to submit).
Using Ctrl+D
on Linux/Mac or Ctrl+Z
and Enter
on Windows only works when the shortcut is pressed at a blank prompt.
Note that the above shortcuts assume you are working in the new Python REPL (3.13+).
On Python 3.12 the only shortcuts above that worked on Windows are:
Left
andRight
for navigating charactersUp
andDown
for navigating line-by-line historyCtrl+Z
Enter
for exitingCtrl+Left
andCtrl+Right
for navigating words
Most of those shortcuts also worked on Python 3.12 on Linux and Mac except:
Up
andDown
only navigated line-by-line historyAlt+Enter
did nothingF2
andF3
did nothing because these modes were added in the new REPL- Some shortcuts (like
Ctrl+U
) may differ slightly in their abilities
Shortcuts You Probably Won't Use
The above list of shortcuts …
Read the full article: https://www.pythonmorsels.com/repl-features/
September 08, 2025 10:00 PM UTC
Django Weblog
Getting Started With Open Source Through Community Events
In July, I joined Raffaella Suardini and Sage Abdullah for the Djangonaut Space Space Reviewers Episode 6, where we reviewed a Django PR during a live stream. This was a fun event. I won’t get into the technical aspects of the review, and I won’t point out the many mistakes I made. Instead, I want to revisit several “getting started with open source” community events and reflect on my personal growth since I first got involved with open source.
I hope this encourages others to attend those events and similarly get involved!
Tutorial office hours 🕐
My first open source contribution happened accidentally during DjangoCon US 2023. I volunteered to host office hours to help tutorial attendees set up their development environments. I went through the tutorial projects, found a missing dependency in one of them, and reported it on the conference chat. A conference organizer, Tim Schilling, responded and suggested that I open a pull request (PR) to the project. I remember thinking to myself, “Really? I can do that?”.
Sprints 🏃
During the Sprint Days of the conference, I participated and opened two PRs to address accessibility issues. I didn’t know much about accessibility at that point, and I would not have known how to navigate the contribution process and pick out issues on my own. Thankfully, the project leaders were there to guide new contributors, and I was able to gain hands-on experience with these first few PRs.
Testathons 🧪
There was another event that took place during the Sprint Days called Testathon. I had heard of hackathons before, but I had not heard of testathons. I attended and found out they were like live stream coding or group pair programming. One person shared their screen and the group chimed in on strategies. The purpose of the testathon was to show people how to test open source projects against Django’s beta release. The code driver (or anyone else in the group) would point out what files to look for, how to run tests, and how to open PRs. Every project is slightly different, from project setup to contributing etiquette, and I learned several different things from attending 2 testathons. I loved the interactive and intimate nature of the event. It exposed me to another aspect of open source projects and contributions. I also thought it was very brave of people to share their screens and work through code together in a group. My brain would have short circuited if I were put on the spot like that!
—
From DjangoCon US 2023, I participated in 3 different types of events where I got hands-on experience with open source contributions, and I wanted more! I was curious about the live stream coding and group pair programming opportunities, too. This was definitely outside of my comfort zone, and I wanted to know how I could overcome my own inhibitions and participate more actively. I wanted to be able to jump into events so nonchalantly as everyone else seemed to do. (Of course, that’s the perception. Now, I know that most people feel some level of nervousness or anxiety when they are hosting or attending such events, and that’s absolutely normal.)
Djangonaut Space 🚀
When the Djangonaut Space program was announced, I jumped at the opportunity. I applied and was accepted for the first session, which took place from mid-January to early March of 2024. With the guidance of the Navigator and Captain on my team, I learned to sift through the Django’s Trac ticket management system, pick out a ticket, and I also faced my fear of posting comments publicly. The PR was merged, and it was thrilling to see my GitHub username in the history of the Django code base.
In March 2024, when the first Djangonaut Space session came to a close, Tim, a program organizer, asked if anyone was interested in hosting a “Getting Started With Contributing” event. I expressed my interest, and Tim suggested a ticket to work on. Unfortunately, I didn’t follow through. How could I host a “Getting Started With Contributing” event? First, I wasn’t sure if I even knew how to get started. Second, I wasn’t ready to lead an event and the discussions while simultaneously sharing my screen and thinking out loud. Finally, I wasn’t ready to be on camera in the public eye. Even though I had just finished the Djangonaut Space program, I hadn’t overcome my own inhibitions. I didn’t ask for guidance, and the event never materialized.
Space Reviewers 👾
About 8 months later in November 2024, Space Reviewers launched its very first episode. I thought it was such a creative format. I wanted to be a part of it. By this time, I was getting a lot of training with event organizing through my role as the Session Organizer for Djangonaut Space, but I wasn’t sure how to ask about joining the Space Reviewers crew, and maybe it was too early in the formation of the group to bring on another member.
It wasn’t until June 2025 that I finally asked if I could help out with Space Reviewers. The crew welcomed me as a new member. I started out by making a pre-recorded video, a PR Review Deep Dive, that was uploaded to the Djangonaut Space YouTube channel. I had a lot of fun recording and editing the video.
A month later, in July 2025, the crew members planned for the next episode. Raffaella scheduled time for the event and created the show notes, and I was taking on Tim’s role as a co-organizer. Because I would be managing the video stream and sharing my screen, I realized that I could be the single point of failure during the event. There was no safety element that a pre-recorded video offers. If my internet went down, or if my computer crashed, or if I stupidly clicked the wrong button, the live stream could come to a halt. It was a terrifying thought, but I took on the risks and pushed forward.
On the day of the event, there was a delay to the start time and some fumbles on my end, but overall, it was very fun and productive. People joined and shared their tips and tricks in the live chat. By the end, we were able to walk through the review process and post our comments on the PR. Looking back, I think making the pre-recorded video was a great stepping stone towards hosting the live stream.
I’m so glad I had the opportunity to work with Raffaella and Sage as part of Space Reviewers. They have a lot of insights and perspectives that I didn’t have. I had a lot of fun taking on the new challenges that came with organizing this event. Initially, I struggled internally as I tried to face some of my fears. There were moments leading up to the event where I thought to myself, “Why did I volunteer to do this???” In the end, I’m glad I did.
Personal growth 🌱
Some of the challenges I overcame might not seem like a big deal, but when I compare myself to where I was at the beginning of DjangoCon US 2023, I can see my personal growth quite prominently. Now, I know how to get started with contributing, and I am able to walk people through the process. I am also a lot more comfortable taking ownership of organizing and leading events. (I remember a time when I constantly needed to ask for permission or confirmation before executing an action.) I can brush off the fumbles I make as the camera is rolling, and I can continue on with the discussion.
When I revisit the community events that I have participated in over the past 2 years, from Space Reviewers, to Sprints, to Testathons, to Tutorial office hours, I realize how far I have come. I am also reminded of what it was like to be absolutely new to open source and to the community. Although I still feel somewhat new, I’m not a deer in headlights anymore. I’m still trying to find my place in open source, and the best way to do that is to continue showing up and continue helping out. One small PR at a time, one small review at a time. One little blog, one little video…
Let’s Get Started! 🌟
If you’re looking to contribute to open source, check out the upcoming events and programs.
- Djangonaut Space Session 5 - An 8-week, semi-structured mentorship program and community. Applications are open now until Sep 14th.
- Django on the Med - 3 days of Sprints to work on Django, taking place 7th-9th Oct 2025, in Palafrugell Spain.
- DjangoCon US 2025 - 3 days of talks and 2 days of Sprints, from 8th-12th Sep 2025, in Chicago, IL, USA.
- Django Girls+ - One-day programming workshops, for women and underrepresented persons. Check out the 26 upcoming events hosted all around the world.
It doesn’t matter if you’ve been making software for 20 years or 20 days, there are many events to help you get started with open source, and many more reasons to stick around.
Thank you to Lilian for proposing this guest post on the Django blog! Lilian was our DSF Member of the Month in August 2025. You can learn more about her at ontowhee.com and follow her writing at buttondown.com/ontowhee.
September 08, 2025 09:59 PM UTC
Real Python
The Python Documentary Celebrates History While Developer Surveys Celebrate Python
The Python documentary debuts! Explore Python's journey, 2025 survey results, explosive growth, and key September news updates.
September 08, 2025 02:00 PM UTC
Python Bytes
#448 I'm Getting the BIOS Flavor
Topics include prek, tinyio, The power of Python’s print function, and Vibe Coding Fiasco: AI Agent Goes Rogue, Deletes Company's Entire Database.
September 08, 2025 08:00 AM UTC
Wingware
Wing Python IDE Version 11.0.4 - September 8, 2025
Wing Python IDE version 11.0.4 has been released. It adds debugger and code analysis support for Python 3.14, improves Python code analysis and code warnings, and makes a number of other minor improvements.

Downloads
Wing 10 and earlier versions are not affected by installation of Wing 11 and may be installed and used independently. However, project files for Wing 10 and earlier are converted when opened by Wing 11 and should be saved under a new name, since Wing 11 projects cannot be opened by older versions of Wing.
New in Wing 11
Improved AI Assisted Development
Wing 11 improves the user interface for AI assisted development by introducing two separate tools AI Coder and AI Chat. AI Coder can be used to write, redesign, or extend code in the current editor. AI Chat can be used to ask about code or iterate in creating a design or new code without directly modifying the code in an editor.
Wing 11's AI assisted development features now support not just OpenAI but also Claude, Grok, Gemini, Perplexity, Mistral, Deepseek, and any other OpenAI completions API compatible AI provider.
This release also improves setting up AI request context, so that both automatically and manually selected and described context items may be paired with an AI request. AI request contexts can now be stored, optionally so they are shared by all projects, and may be used independently with different AI features.
AI requests can now also be stored in the current project or shared with all projects, and Wing comes preconfigured with a set of commonly used requests. In addition to changing code in the current editor, stored requests may create a new untitled file or run instead in AI Chat. Wing 11 also introduces options for changing code within an editor, including replacing code, commenting out code, or starting a diff/merge session to either accept or reject changes.
Wing 11 also supports using AI to generate commit messages based on the changes being committed to a revision control system.
You can now also configure multiple AI providers for easier access to different models.
For details see AI Assisted Development under Wing Manual in Wing 11's Help menu.
Package Management with uv
Wing Pro 11 adds support for the uv package manager in the New Project dialog and the Packages tool.
For details see Project Manager > Creating Projects > Creating Python Environments and Package Manager > Package Management with uv under Wing Manual in Wing 11's Help menu.
Improved Python Code Analysis
Wing 11 makes substantial improvements to Python code analysis, with better support for literals such as dicts and sets, parametrized type aliases, typing.Self, type of variables on the def or class line that declares them, generic classes with [...], __all__ in *.pyi files, subscripts in typing.Type and similar, type aliases, type hints in strings, type[...] and tuple[...], @functools.cached_property, base classes found also in .pyi files, and typing.Literal[...].
Updated Localizations
Wing 11 updates the German, French, and Russian localizations, and introduces a new experimental AI-generated Spanish localization. The Spanish localization and the new AI-generated strings in the French and Russian localizations may be accessed with the new User Interface > Include AI Translated Strings preference.
Improved diff/merge
Wing Pro 11 adds floating buttons directly between the editors to make navigating differences and merging easier, allows undoing previously merged changes, and does a better job managing scratch buffers, scroll locking, and sizing of merged ranges.
For details see Difference and Merge under Wing Manual in Wing 11's Help menu.
Other Minor Features and Improvements
Wing 11 also adds support for Python 3.14, improves the custom key binding assignment user interface, adds a Files > Auto-Save Files When Wing Loses Focus preference, warns immediately when opening a project with an invalid Python Executable configuration, allows clearing recent menus, expands the set of available special environment variables for project configuration, and makes a number of other bug fixes and usability improvements.
Changes and Incompatibilities
Since Wing 11 replaced the AI tool with AI Coder and AI Chat, and AI configuration is completely different than in Wing 10, you will need to reconfigure your AI integration manually in Wing 11. This is done with Manage AI Providers in the AI menu. After adding the first provider configuration, Wing will set that provider as the default. You can switch between providers with Switch to Provider in the AI menu.
If you have questions, please don't hesitate to contact us at support@wingware.com.
September 08, 2025 01:00 AM UTC
September 07, 2025
Real Python
Quiz: Sorting Dictionaries in Python: Keys, Values, and More
Test your skills in sorting Python dictionaries by keys and values. Learn about insertion order, dictionary views, and sorting techniques.
September 07, 2025 12:00 PM UTC
Quiz: Defining and Calling Python Functions
Practice defining and calling functions in Python, including parameters, argument types, default values, and function documentation.
September 07, 2025 12:00 PM UTC
September 06, 2025
TechBeamers Python
Python Memory Tricks: Optimize Your Code for Efficiency in 2025
Learn 8 tricks to reduce memory use in Python programs. Fix memory leaks, pick better data structures, and work with large amounts of data more easily. Use tools like generators and slots with simple code examples. These tips help make your programs faster and stop MemoryErrors.
September 06, 2025 07:00 PM UTC
Rodrigo Girão Serrão
uv cheatsheet
Cheatsheet with the most common and useful uv commands to manage projects and dependencies, publish projects, manage tools, and more.
This cheatsheet lists the most commonly used commands and should be more than enough for you to get started using uv. For more advanced use cases, check the uv docs and its guides.
Written for uv version 0.8.15.
Creating projects 🧱
uv init |
Initialise a project in the current directory |
uv init myproj |
Initialise a project myproj in the directory myproj |
uv init --app --package ... |
Initialise a packageable app (e.g., CLI, web app, ...) |
uv init --lib --package ... |
Initialise a packageable library (code you import) |
uv init --python 3.X ... 1 |
Use Python 3.X for your project |
Managing project dependencies 🧩
uv add requests |
Add requests as a dependency |
uv add A B C |
Add A , B , and C as dependencies |
uv add -r requirements.txt |
Add dependencies from the file requirements.txt |
uv add --dev pytest |
Add pytest as a development dependency |
uv run pytest |
Run the pytest executable that is installed in your project |
uv remove requests |
Remove requests as a dependency |
uv remove A B C |
Remove A , B , C , and their transitive dependencies |
uv tree |
See the project dependencies tree |
uv lock --upgrade |
Upgrade the dependencies' versions |
Project lifecycle management 🔄
uv build |
Build your packageable project |
uv publish |
Publish your packageable project to PyPI |
uv version |
Check your project version |
uv version --bump major |
Bump project major version (e.g., 0.3.2 -> 1.0.0 ) |
uv version --bump minor --bump beta |
Bump minor version into a beta (e.g., 1.0.0 -> 1.1.0b1 or 1.1.0b1 -> 1.1.0b2 ) |
uv version --bump rc |
Bump version into release candidate (e.g., 1.1.0b1 -> 1.1.0rc1 or 1.1.0rc1 -> 1.1.0rc2 ) |
uv version --bump stable |
Turn into a stable version (e.g., 1.1.0rc1 -> 1.1.0 ) |
Managing tools ⚒️
uv tool run pytest |
Run pytest in an isolated environment |
uv tool run textual-demo --from textual |
Run the command textual-demo from the package textual |
uvx ... |
Alias for uv tool run ... |
uv tool install ruff |
Install ruff in an isolated environment but make it globally available |
uv tool install --with dep ... |
Install the given tool with extra dependencies (e.g., install a tool with its plugins) |
uv tool list |
List all tools installed |
uv tool upgrade ruff |
Upgrade the ruff tool |
uv tool upgrade --all |
Upgrade all tools |
uv tool uninstall ruff |
Uninstall ruff |
uv tool install -e . 2 |
Install the current packageable project in editable mode |
Working with scripts 📜
uv init --script myscript.py |
Initialise the script myscript.py |
uv init --script myscript.py --python 3.X |
Initialise the script myscript.py and pin it to version 3.X |
uv add click --script myscript.py |
Add the dependency click to the script |
uv remove click --script myscript.py |
Remove the dependency click from the script |
uv run myscript.py |
Run the script myscript.py |
uv run --python 3.X myscript.py |
Run the script with the given Python version |
uv run --with click myscript.py |
Run the script along with... |
September 06, 2025 05:36 PM UTC
Hugo van Kemenade
Ready prek go!
I’ve been using prek recently as a drop-in replacement for pre-commit.
It uses uv for managing Python virtual environments and dependencies, is rewritten in
Rust (because of course) and uses the same .pre-commit-config.yaml
as pre-commit.
Its homepage says it’s not yet production ready, but several projects like Apache Airflow and PDM are already using it. I’ve been using it for a while and reporting issues as I find them; the maintainer is quick with fixes and releases. All the hooks I need are now supported.
Getting started #
First install using one of the many methods, then:
cd my-repo
pre-commit uninstall # remove the old hooks
prek install # install the new hooks
prek run --all-files # run all lints on all files
git commit -m "my commit" # run on the changed files in a commit
Benchmarks #
prek is noticeably quicker at installing hooks.
- ⚡ About 10x faster than pre-commit and uses only a third of disk space.
This 10x is a comparison of installing hooks using the excellent hyperfine benchmarking tool.
Here’s my own comparison.
-
In the first test, I initially ran
pre-commit clean
orprek clean
to clear their caches. I then ran each tool withrun --all-files
in serial on the 126 repos I have cloned right now, 84 of which have a.pre-commit-config.yaml
file. Each then downloads and installs the hooks when needed, then runs the lint tools. -
Second, because running the lint tools should be independent and constant time for both tools, the next test ran
install-hooks
instead ofrun --all files
.To get an idea of the amount of work for these two tests, pre-commit reported initialising environments 217 times.
-
Finally, let’s run hyperfine on the Pillow config, which installs hooks from 14 repos:
❯ hyperfine \
--prepare 'rm -rf ~/.cache/prek/ && rm -rf ~/.cache/pre-commit && rm -rf ~/.cache/uv' \
--setup 'prek --version && pre-commit --version' \
'prek install-hooks' \
'pre-commit install-hooks'
Results #
pre-commit |
prek |
Times faster | |
---|---|---|---|
run --all-files |
17m13s | 7m59s | 2.16 |
install-hooks |
10m48s | 2m24s | 4.50 |
hyperfine |
39.841s | 5.539s | 7.19 |
The hyperfine results:
Benchmark 1: prek install-hooks
Time (mean ± σ): 5.539 s ± 0.176 s [User: 8.973 s, System: 5.692 s]
Range (min … max): 5.231 s … 5.834 s 10 runs
Benchmark 2: pre-commit install-hooks
Time (mean ± σ): 39.841 s ± 2.017 s [User: 19.760 s, System: 8.203 s]
Range (min … max): 36.930 s … 43.976 s 10 runs
Summary
prek install-hooks ran
7.19 ± 0.43 times faster than pre-commit install-hooks
Give it a try and give it a ⭐!
Bonus #
These are the aliases I have set for pre-commit and prek:
alias pci="pre-commit install --allow-missing-config"
alias pcu="pre-commit uninstall"
alias pca="pre-commit autoupdate --jobs 0"
alias pcr="pre-commit run --all-files"
alias pki="prek install --allow-missing-config"
alias pku="prek uninstall"
alias pka="prek autoupdate --jobs 0"
alias pkr="prek run --all-files"
Where:
install
’s--allow-missing-config
prevents failing with an error code when a repo has no config fileautoupdate
’s--jobs 0
uses all the available threads to make it faster
Header photo: AH-1G Aircraft Maintenance Test Flight Handbook and handwritten checklist for helicopters in the San Diego Air and Space Museum Archive, with no known copyright restrictions.
September 06, 2025 03:50 PM UTC
September 05, 2025
Django Weblog
DSF at EuroPython 2025: Celebrating 20 years of Django
This year, the Django Software Foundation (DSF) was invited by EuroPython to come to the event, showcase the framework and the vibrant community around it. The DSF had a booth in the community area where attendees could learn more about Django and meet maintainers.
This year was extra special: Django’s 20th birthday was right at the beginning of the conference! The milestone was marked in style, starting on Wednesday evening at Pyvo, the local Python community meetup in Prague, where we celebrated with a cake.
On Friday, the celebration continued with an open-space gathering at the conference — and, of course, another cake 🎂. For people who missed this, there are other local Django birthday events running through the rest of 2025!
View all local 20th birthday events
Adding to the festive atmosphere, the DSF shared stickers co-branded with their unofficial pony mascot and the EuroPython and EuroPython Society logos. These became an instant hit with attendees, combining Django’s playful mascot with EuroPython Society’s identity.
The Django community was also active during the sprint weekend. Over two days, 21 participants worked on Django, tackling 12 issues and merging 4 pull requests. For newcomers, it was a welcoming way to start contributing; for experienced developers, it was a chance to share knowledge and push the project forward together.
We asked the members of the Django Software Foundation attending EuroPython how they liked EuroPython and this is what they said:
The talks and tutorials were so great and I got to witness amazing projects from this community. This was my first EuroPython conference and let me tell you, this community over-delivered. It was also my first time organizing Django Girls outside Africa. Django Girls Prague was amazing.
– Doreen Nangira - Django Girls organizer
Just the perfect mixture of catching up with people I know, meeting people I don’t know, learning new things. Time well spent chatting w/ Python veterans and also first-timers. Volunteering there was ACE, and I’m thankful we got to have a booth and birthday cake for Django 🎂
– Thibaud Colas - President, Django Software Foundation
It was my first EuroPython, it felt really special! I was surrounded by wonderful people, and it was an amazing experience to volunteer at our community booth.
– Raffaella Suardini - Djangonaut Space organizer
We’re delighted the DSF joined us this year. If you’re part of a foundation and would like to have a booth at EuroPython, keep an eye out for our Call for Communities next year.
Thank you to EuroPython Vice Chair and DSF Individual member Mia Bajić for reporting back on the event ❤️. And thank you to our volunteers Tom Carrick, Thibaud Colas, Raffaella Suardini, and Alex Gómez who represented our foundation at the conference. As well as to Doreen Nangira who ran the Django Girls+ workshop at the conference!
September 05, 2025 02:02 PM UTC
Real Python
The Real Python Podcast – Episode #264: Large Language Models on the Edge of the Scaling Laws
What's happening with the latest releases of large language models? Is the industry hitting the edge of the scaling laws, and do the current benchmarks provide reliable performance assessments? This week on the show, Jodie Burchell returns to discuss the current state of LLM releases.
September 05, 2025 12:00 PM UTC
EuroPython
Django Software Foundation at EuroPython 2025: Celebrating 20 Years of the Django framework
At EuroPython, we’re always glad to welcome friends from other foundations. This year, the Django Software Foundation (DSF) joined us to showcase the framework and the vibrant community around it.
The DSF had a booth in the community area where attendees could learn more about Django and meet
September 05, 2025 09:09 AM UTC
Brian Okken
Python People podcast now at pythontest.com/pythonpeople
Like the recent archival of Test and Code, the Python People podcast has also moved. Python People is now at pythontest.com/pythonpeople.
Is it also archived? As in done?
I don’t think so. I think I might start that up again at some point.
But for now, it’s on a long-ish term pause.
BTW, the RSS feeds for both Python People and Test and Code should be redirected correctly, so you shouldn’t have to change anything in your podcast player.
September 05, 2025 12:00 AM UTC
September 04, 2025
Trey Hunner
Customizing your Python REPL's color scheme (Python 3.14+)
September 04, 2025 07:42 PM UTC
Django Weblog
Last call for DjangoCon US 2025 tickets!
DjangoCon US starts next week in Chicago, IL on September 8-12th, 2025!
With three amazing keynotes and over fifty presentations over three days, join us in person or online where you can watch presentations on your own schedule or stream live with us during the live event.
Can't make it to Chicago? Our online tickets give you the best of both worlds. Watch live as it happens or catch up on your own schedule – all talks will be available to stream throughout the conference and beyond. You'll get the same great content, participate in online discussions, and join our vibrant community from wherever you are. Plus, with two days of virtual sprints alongside our in-person sprints, online attendees can contribute to Django projects and collaborate with the community just like everyone else.
Get your ticket today before it's too late! Check out the full schedule, visit 2025.djangocon.us for more details, or contact us at hello@djangocon.us with any questions.
September 04, 2025 05:01 PM UTC
Keyboard shortcuts in Django via GSoC 2025
This summer I participated in the Google Summer of Code program with Django. My work focused on introducing keyboard shortcuts to the Django admin interface which led to a new package: django-admin-keyshortcuts.
Proposal and Community Discussions
My original GSoC proposal was to improve the existing django-admin-keyboard-shortcuts package maintained by one of my mentors, Tom. The plan was to fix bugs, add new keyboard shortcuts, build a command palette, and eventually merge these features into Django's core admin. I initially thought getting my GSoC proposal accepted meant I could dive straight into coding. But Tom explained that Django has its own process for new features, which starts off with community discussions.
After posting on the forum and gathering feedback, we decided to focus on keyboard shortcuts only, and continue exploring that in packages rather than target Django core immediately. This way the feature can be tested and improved more quickly without waiting on Django's long release cycle.
The accessibility team helped drafting keyboard shortcuts outlining key requirements and expected outcomes, in particular making sure shortcuts would be widely compatible with browsers and assistive technologies. That document served as the base for developing django-admin-keyshortcuts.
django-admin-keyshortcuts
This package adds useful keyboard shortcuts to the Django admin interface. The goal is to make the Django admin interface faster to navigate and more accessible to keyboard-first users. Here are some of the shortcuts we have added so far:
- / focuses the search bar.
- j/k focuses next/previous object.
- Ctrl+s saves the object.
- Alt+d prompts to delete the object.
The package also comes with a keyboard shortcuts dialog, crucial so users of the admin can discover those new features:
Developers can also define custom shortcuts by extending admin templates. Detailed instructions can be found in the package's README.
Under the hood, the package uses the hotkey library for handling shortcuts. The library seems to be well maintained (compared to other alternatives) and is used for keyboard shortcuts in GitHub.
What's next
We have made a lot of progress, but there's still work to do before we can push to merge this functionality inside Django core.
Implementation issues
Right now, there are a couple of known problems:
- Shortcuts do not trigger when input or textfield is focused:
- Shortcut keys not consistent when switched to non-US layouts:
To address these we may wait for the hotkey library maintainers to implement the necessary fixes, or look for alternatives.
Gather feedback
We want more users to try it out! Testing in different scenarios will help find bugs faster and improve the package. The default shortcut set is also small, we need feedback to determine which shortcuts are most useful. We also plan to list the package on a new "Experiments" section on the new Django Ecosystem page to make it more visible.
But for now, try it out and let us know what you think! We have a static admin demo for people to directly try the shortcuts. Or install django-admin-keyshortcuts to test it on your own project.
Let us know what you think over on the Django Forum!
September 04, 2025 03:02 PM UTC
Seth Michael Larson
Extracting NES & N64 ROMs from Zelda Collector's Edition
September 04, 2025 12:00 AM UTC
Stéphane Wirtel
Utilisation d'Obsidian comme source pour Hugo
Au début juillet, dans mon précédent post Utilisation d’Obsidian pour Hugo , j’expliquais que je regardais comment utiliser Obsidian comme source pour mon blog. Jusqu’ici, j’écrivais mes posts dans VS Code ou NeoVim, mais comme Hugo repose sur du Markdown, l’idée d’utiliser directement Obsidian s’est imposée assez naturellement : tout centraliser dans un seul outil, mes notes et mes articles.
L’avantage est que j’ai toutes mes données dans un seul et unique endroit, donc je n’ai plus besoin de rechercher mes infos pour écrire mon article et l’écriture devient plus fluide, car tout est à portée de main.