from datetime import date
print(date.today().year, date.today().month)
# 2025 7
Welcome back Pythonistas! I hope you enjoy your summer vacation if you actually have one. But in any case Iâm glad to see you back reading the fifth issue of my âThis month for Pythonistasâ series which curates the news, articles, tutorials, podcasts, and more Python stuff worth noting in this month.
Before we continue, please note that this blog is synced across several platforms:
Ready? Letâs get started!
Events & Social
EuroPython 2025 took place in Prague again this year. For those of you who did not attend, thereâs no official recordings of the talks yet.
New Versions
Python 3.14.0 release candidate 1
The first release candidate of Python 3.14 is ready! Source code as well as binary distributions can be found here.
The second candidate (and the last planned release preview) is scheduled for Tuesday, 2025-08-26, while the official release of 3.14.0 is scheduled for Tuesday, 2025-10-07.
Tutorials
- Deeplearning.aiâs Post-training of LLMs from NexusFlow
In this course, youâll learn three common post-training methodsâSupervised Fine-Tuning (SFT), Direct Preference Optimization (DPO), and Online Reinforcement Learning (RL)âand how to use each one effectively.
- Deeplearning.aiâs Pydantic for LLM Workflows
Use Pydantic to generate structured outputs from LLMs, ensuring the responses follow a specific format that your application can reliably process.
Articles
The blog post explains how global variables work in Python bytecode using the Memphis interpreter built in Rust as an example. It highlights that while the VM doesnât store the names of local variables, it performs dynamic name resolution for global variables, a key aspect of Pythonâs flexibility.
This article explains how to use Pythonâs dis
module to view the bytecode generated from a simple script. The bytecode is a low-level representation of the Python code, showing the sequence of operations the Python interpreter performs. For example, the LOAD_CONST
and STORE_NAME
instructions represent assigning a constant value to a variable, while the CALL
instruction indicates a function call.
The article discusses four ways to accelerate Python code: efficiency improvements by reducing unnecessary calculations, using compilation to optimize performance, leveraging parallelism with multiple CPU cores, and adopting development processes like benchmarking and testing. An example analyzing letter frequency in Jane Austenâs Northanger Abbey demonstrates how combining these methods yields significant speedups, ultimately achieving a 330Ă faster performance.
The article discusses state management using Signals in Python, highlighting their benefits in handling complex state dependencies and cascading updates. It contrasts Signals with traditional manual approaches, which can lead to bugs and maintenance challenges due to implicit dependencies.
This blog post discusses the current state of CPythonâs JIT (Just-In-Time) compiler. The author highlights that while the JIT is still experimental and not always faster than the interpreter, a growing community of contributors is working on improving it. Key areas for improvement include performance and coverage.
The addition of free-threaded Python allows for better thread scalability, particularly in Python extensions like NumPy. Nathan Goldbaum and Lysandros Nikolaou presented at PyCon US 2025 about the challenges and solutions for migrating the Python ecosystem to support the new free-threaded model, emphasizing the importance of maintaining compatibility with existing C/C++/Rust-based extensions.
The author details a method for converting a blog from reStructuredText to Markdown, using an LLM to generate and validate scripts, emphasizing the importance of trust in the automated process. It concludes that while MCP may be useful for certain tasks, it currently faces limitations in composability and context management compared to direct code generation.
The article introduces Wasm-agents, a blueprint for creating AI agents that can run directly in your browser. These agents are packaged as standalone HTML files, utilizing WebAssembly and Pyodide to execute Python scripts and libraries.
The article discusses lessons learned from developing an AI code review agent at Cubic. Initially, the tool was too noisy, generating many false positives and irrelevant comments. Improvements included requiring the AI to explicitly justify its findings, simplifying the toolset to essential components, and employing specialized micro-agents for different tasks. These changes reduced false positives by 51%, improved developer trust, and streamlined the code review process.
The article reviews various LLMs and web research tools for internet-based research tasks. Overall, standard ChatGPT with web search is recommended for its speed, manageability, and iterative capabilities, while more complex, slower tools are less practical for routine research tasks.
This article discusses âcontext engineeringâ, which involves providing the right information to agents (like LLMs) within their context window to help them perform tasks effectively. It covers four strategies: write, select, compress, and isolate.
The article discusses Peter Naurâs 1985 idea that programming is about building a shared theory of how a system works. Source code is just a representation, and critical knowledge is in developersâ minds. Todayâs AI tools and novice developers risk losing this underlying theory, leading to incoherent code and technical debt. Senior developers are now more vital than ever because they preserve and evaluate the theoretical framework, ensuring system coherence and understanding the âwhyâ behind code decisions.
The article argues that while the creation of code may be sped up by tools like LLMs, the true bottlenecks in software engineering lie in code reviews, testing, debugging, coordination, and communication. These processes, which require deep understanding and collaboration, remain critical and cannot be bypassed.
Podcasts
đ„ core.py
đ RealPython Podcast
- Episode 256: Solving Problems and Saving Time in Chemistry With Python
- Episode 257: Comparing Real-World Python Performance Against Big O
- Episode 258: Supporting the Python Package Index
đ„§ Python Bytes Podcast
- #438 Motivation time
- #439 That Astral Episode
- #440 Canât Register for VibeCon
- #441 Itâs Michaels All the Way Down
- #442 Cloud bills in scientific notation
đŠ Talk Python to me
- #512: Building a JIT Compiler for CPython
- #513: Stories from Python History
- #514: Python Language Summit 2025
đ Pybites Podcast
- #194: Evolution, not extinction: why developers still matter in the age of AI
- #195: Patterns, paradigms, and pythonic thinking with Rodrigo GirĂŁo SerrĂŁo
- #196: Robin Quintero on Complexipy
- #197: Polars with Jeroen Janssens and Thijs Nieuwdorp
- #198: Tim Hopper on UV and smarter Python development
Repositories
blog -> ScreenEnv: Deploy your full stack Desktop Agent
blog -> Announcing GenAI Processors: Build powerful and flexible Gemini applications
As we wrap up this journey together, I want to take a moment to express my gratitude for your reading. If youâve enjoyed what you just read and would like to help sustain this blog, consider starring this blog on github, it would be great motivation for me to keep updating the blogs!
Alright, that concludes the fifth issue of âThis Month of Pythonistasâ. Thank you again for reading my post. I hope you enjoy it or find something useful, and see you in August!