<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Windows on BlueberryPy</title><description>Recent content in Windows on BlueberryPy</description><link>https://blueberrypy.netlify.app/tags/windows/</link><language>en-us</language><item><title>[one-liner] Install OpenCode</title><link>https://blueberrypy.netlify.app/post/one-liner-opencode/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/one-liner-opencode/</guid><description>&lt;h2 id=&quot;one-liner-series-opencode&quot;&gt;One-Liner series: OpenCode&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://opencode.ai/docs#install&quot;&gt;source: OpenCode documentation&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;install-on-linux-macos&quot;&gt;Install on Linux, macOS&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://opencode.ai/install&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;install-on-windows&quot;&gt;Install on Windows&lt;/h3&gt;
&lt;h4 id=&quot;install-with-npm&quot;&gt;Install with npm&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -g&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; opencode-ai&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;install-with-chocolatey&quot;&gt;Install with chocolatey&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;choco&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; opencode&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;verify-installation&quot;&gt;Verify installation&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;opencode&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;update&quot;&gt;Update&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;opencode&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Mon, 29 Jun 2026 09:06:00 GMT</pubDate><category>cli</category><category>linux</category><category>opencode</category><category>ai</category><category>cli</category><category>windows</category><category>linux</category><category>ubuntu</category><category>macos</category><author>Zeyang Lin</author></item><item><title>[one-liner] Install Bun</title><link>https://blueberrypy.netlify.app/post/one-liner-bun/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/one-liner-bun/</guid><description>&lt;h2 id=&quot;one-liner-series-bun&quot;&gt;One-Liner series: Bun&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://bun.com/docs/installation&quot;&gt;source: Bun docs&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;install-on-linux-and-macos&quot;&gt;Install on Linux and macOS&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://bun.com/install&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;install-on-windows-powershell&quot;&gt;Install on Windows (PowerShell)&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;powershell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;powershell &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;c &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;irm bun.sh/install.ps1|iex&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;update&quot;&gt;Update&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;bun&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Sat, 13 Jun 2026 08:20:00 GMT</pubDate><category>cli</category><category>linux</category><category>bun</category><category>javascript</category><category>windows</category><category>linux</category><category>ubuntu</category><category>macos</category><author>Zeyang Lin</author></item><item><title>[one-liner] Install pnpm</title><link>https://blueberrypy.netlify.app/post/one-liner-pnpm/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/one-liner-pnpm/</guid><description>&lt;h2 id=&quot;one-liner-series-pnpm&quot;&gt;One-Liner series: pnpm&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://pnpm.io/installation&quot;&gt;source: pnpm docs&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;install-on-posix-systems-except-intel-macs-darwin-x64&quot;&gt;Install on POSIX systems (except Intel Macs (darwin-x64))&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://get.pnpm.io/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; -&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;install-on-windows-powershell&quot;&gt;Install on Windows (PowerShell)&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;powershell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;Invoke-WebRequest&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; https:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;get.pnpm.io&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;install.ps1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;UseBasicParsing &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; Invoke-Expression&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;update&quot;&gt;Update&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;pnpm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; self-update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Thu, 11 Jun 2026 08:20:00 GMT</pubDate><category>cli</category><category>linux</category><category>pnpm</category><category>javascript</category><category>windows</category><category>linux</category><category>ubuntu</category><category>macos</category><author>Zeyang Lin</author></item><item><title>[one-liner] Install Claude Code (Native Build)</title><link>https://blueberrypy.netlify.app/post/one-liner-claude-code/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/one-liner-claude-code/</guid><description>&lt;h2 id=&quot;one-liner-series-claude-code-native-build&quot;&gt;One-Liner series: Claude Code (Native Build)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://code.claude.com/docs/en/quickstart&quot;&gt;source: Claude Docs&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;install-on-linuxmacoswsl&quot;&gt;Install on Linux/macOS/WSL&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://claude.ai/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;install-on-windows-powershell&quot;&gt;Install on Windows (PowerShell)&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;powershell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;irm https:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;claude.ai&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;install.ps1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; iex&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;update&quot;&gt;Update&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;claude&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Sun, 02 Nov 2025 08:09:00 GMT</pubDate><category>cli</category><category>linux</category><category>claude</category><category>anthropic</category><category>windows</category><category>linux</category><category>ubuntu</category><category>macos</category><author>Zeyang Lin</author></item><item><title>This Month for Pythonistas - April 2025</title><link>https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-04/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-04/</guid><description>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(date.today().year, date.today().month)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2025 4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;issue-2025-04&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;640&quot; height=&quot;360&quot; src=&quot;/_astro/splash.DZWhiLiw_ZIx3LH.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Welcome back and I’m glad to see you back reading the second issue of my “This month for Pythonistas” series which curates the news, articles, tutorials and more Python stuff worth noting in this April.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across several platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2025-04/&quot;&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-04/&quot;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2025-04/&quot;&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let’s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;events--social&quot;&gt;Events &amp;amp; Social&lt;/h2&gt;
&lt;h3 id=&quot;djangocon-europe-2025&quot;&gt;DjangoCon Europe 2025&lt;/h3&gt;
&lt;p&gt;Dublin, Ireland is the host city of this year’s DjangoCon Europe, which is held from April 23rd to 27th, 2025.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://2025.djangocon.eu/&quot;&gt;djangocon europe website&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;europython-2025&quot;&gt;EuroPython 2025&lt;/h3&gt;
&lt;p&gt;EuroPython has announced three more Keynote Speakers: Sebastián Ramírez (Creator os FastAPI, Typer, SQLModel, etc.), &lt;a href=&quot;https://www.linkedin.com/in/drbrettcannon/&quot;&gt;Brett Cannon&lt;/a&gt; (Python Core Developer), and &lt;a href=&quot;https://www.linkedin.com/in/petr-baudis-906a213/&quot;&gt;Petr Baudiš&lt;/a&gt; (co-founder and CTO of Rossum).&lt;/p&gt;
&lt;p&gt;Besides, EuroPython will have a booth at PyCon US this year.&lt;/p&gt;
&lt;h3 id=&quot;microsoft-turns-50&quot;&gt;Microsoft turns 50&lt;/h3&gt;
&lt;p&gt;Like it or not, Microsoft had remarkable influence over the past decades and is still making a big impact right at the moment. In &lt;a href=&quot;https://unlocked.microsoft.com/50th/&quot;&gt;this page&lt;/a&gt; it celebrates its 50th anniversary by looking back at some iconic moments from the history, sharing some stories, and giving out digital goodies.&lt;/p&gt;
&lt;h3 id=&quot;discord-server-for-free-threaded-python&quot;&gt;Discord server for free-threaded Python&lt;/h3&gt;
&lt;p&gt;There is a dedicated place to discuss free-threaded python on &lt;a href=&quot;https://discord.gg/rqgHCDqdRr&quot;&gt;Discord&lt;/a&gt; now.&lt;/p&gt;
&lt;h3 id=&quot;gvr-bdfl--april-fools-&quot;&gt;GvR BDFL (🤡 April Fools 🤡)&lt;/h3&gt;
&lt;p&gt;BREAKING! Guido van Rossum, the legendary creator of Python, has officially &lt;a href=&quot;https://www.youtube.com/watch?v=wgxBHuUOmjA&quot;&gt;reinstated himself as Benevolent Dictator for Life (BDFL)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;GvR BDFL&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;1003&quot; src=&quot;/_astro/gvr_bdfl.IUZh_qOY_ZeVhRG.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;new-versions&quot;&gt;New versions&lt;/h2&gt;
&lt;h3 id=&quot;python-3133--31210&quot;&gt;Python 3.13.3 &amp;amp; 3.12.10&lt;/h3&gt;
&lt;p&gt;It’s another month for Python version updates.&lt;/p&gt;
&lt;p&gt;Python 3.14 Alpha 7 is out, and the first beta release is expected soon.&lt;/p&gt;
&lt;p&gt;Python 3.13 and 3.12 receive bugfix updates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-3133/&quot;&gt;Python 3.13.3 Downloads and Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-31210/&quot;&gt;Python 3.12.10 Downloads and Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following versions receive only security-related fixes and no binary distributions are provided: 3.11.12, 3.10.17 and 3.9.22.&lt;/p&gt;
&lt;h3 id=&quot;visual-studio-code-1990&quot;&gt;Visual Studio Code 1.99.0&lt;/h3&gt;
&lt;p&gt;VS Code joins Claude Desktop and other “AI IDEs”, having &lt;a href=&quot;https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode&quot;&gt;Agent Mode&lt;/a&gt; and &lt;a href=&quot;https://code.visualstudio.com/docs/copilot/chat/mcp-servers&quot;&gt;MCP servers support (Preview)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A new open-source and local MCP server is introduced, allowing integration with any LLM tool supporting MCP. Read the details in &lt;a href=&quot;https://github.blog/news-insights/product-news/github-copilot-agent-mode-activated/&quot;&gt;Vibe coding with GitHub Copilot: Agent mode and MCP support rolling out to all VS Code users&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Update: Agent Mode is now officially turned on for everyone.&lt;/p&gt;
&lt;h3 id=&quot;django-52-lts&quot;&gt;Django 5.2 LTS&lt;/h3&gt;
&lt;p&gt;This LTS version introduces new features (Automatic model imports in the shell, Composite primary keys, etc.) and deprecates some functionalities, and it will receive security updates for the next three years at least. Check its &lt;a href=&quot;https://docs.djangoproject.com/en/5.2/releases/5.2/&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;pytorch-27&quot;&gt;PyTorch 2.7&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://pytorch.org/blog/pytorch-2-7/&quot;&gt;This release&lt;/a&gt; introduces support for NVIDIA’s new Blackwell GPU architecture and ships pre-built wheels for CUDA 12.8. &lt;code&gt;TorchAudio&lt;/code&gt; is updated to &lt;code&gt;2.7.0&lt;/code&gt; and &lt;code&gt;TorchVision&lt;/code&gt; is &lt;code&gt;0.22.0&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;ubuntu-2504-fedora-42-mx-236-and-manjaro-250&quot;&gt;Ubuntu 25.04, Fedora 42, MX 23.6 and Manjaro 25.0&lt;/h3&gt;
&lt;p&gt;It seems like a big month for Linux distros since several popular distro have major/minor updates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lists.ubuntu.com/archives/ubuntu-announce/2025-April/000311.html&quot;&gt;Ubuntu 25.04 “Plucky Puffin”&lt;/a&gt; introduces Linux 6.14 kernel, GNOME 48, and offers 9 months of support.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fedoramagazine.org/announcing-fedora-linux-42/&quot;&gt;Fedora 42&lt;/a&gt; promotes KDE Plasma variation to “Full Edition”.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mxlinux.org/blog/mx-23-6-now-available/&quot;&gt;MX Linux&lt;/a&gt; is a regular refresh containing bugfixes, kernel updates, and application updates.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forum.manjaro.org/t/manjaro-25-0-zetar-released/177008&quot;&gt;Manjaro 25.0 “Zetar”&lt;/a&gt; brings various updates to different desktop environment editions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tutorials&quot;&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/vibe-coding-101-with-replit/&quot;&gt;Vibe Coding 101 with Replit&lt;/a&gt; from replit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Take your own discretion on “Vibe Coding” (there’s an article about it below), but here’s a hands-on tutorial on deeplearning.ai.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You’ll use Replit’s cloud environment— with an integrated code editor, package manager, and deployment tools—to build and deploy two web applications with the help of an AI coding agent. Along the way, you’ll learn strategies for working effectively with agents and improve your development skills in the process.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/getting-structured-llm-output/&quot;&gt;Getting Structured LLM Output&lt;/a&gt; from DotTxt&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;You’ll gain a fundamental understanding of structured outputs and learn efficient ways to generate outputs in your defined schema or format.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/building-ai-browser-agents/&quot;&gt;Building AI Browser Agents&lt;/a&gt; from AGI Inc.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Learn the fundamentals of autonomous web agents, what they are, how they work, their limitations, and the decision-making strategies taken to optimize their performance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/building-code-agents-with-hugging-face-smolagents/&quot;&gt;Building Code Agents with Hugging Face smolagents&lt;/a&gt; from HuggingFace&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Understand the architecture and benefits of code agents that write code to perform tasks, compare them to traditional tool-calling agents, and learn when to use each approach.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;RealPython’s &lt;a href=&quot;https://realpython.com/python-duckdb/&quot;&gt;Introducing DuckDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;The tutorial will equip you with the practical knowledge necessary to get started with DuckDB, including its Online Analytical Processing (OLAP) features, which enable fast access to data through query optimization and buffering.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;freeCodeCamp.org’s &lt;a href=&quot;https://www.youtube.com/watch?v=5avSMc79V-w&quot;&gt;Code DeepSeek V3 From Scratch in Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a nearly-4-hours Youtube video tutorial brought by freeCodeCamp.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HuggingFace’s &lt;a href=&quot;https://huggingface.co/learn/agents-course&quot;&gt;Agents Course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A series of tutorials introducing various aspects of AI Agents.&lt;/p&gt;
&lt;h2 id=&quot;articles&quot;&gt;Articles&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://davepeck.org/2025/04/11/pythons-new-t-strings/&quot;&gt;Python’s new t-strings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://peps.python.org/pep-0750/&quot;&gt;PEP 750 – Template Strings&lt;/a&gt; is &lt;strong&gt;accepted&lt;/strong&gt;. This PEP introduces &lt;em&gt;template strings&lt;/em&gt; which are a generalization of &lt;em&gt;f-strings&lt;/em&gt;. Putting a &lt;code&gt;t&lt;/code&gt; before a string &lt;em&gt;template&lt;/em&gt; would keep it from being evaluated as a normal string but make it an instance of a new type &lt;code&gt;Template&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In his blog, Dave introduces the motivation behind this PEP and shows how to play with it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://peps.python.org/pep-0751/&quot;&gt;PEP 751 – A file format to record Python dependencies for installation reproducibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PEP 751 is &lt;strong&gt;accepted&lt;/strong&gt;. This PEP proposes a standard for the format of a file recording the requirements/dependencies of a Python project (ie. a lock file but standardized, agreed across the whole community).&lt;/p&gt;
&lt;p&gt;Update:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip&lt;/code&gt; 25.1+ adds experimental &lt;code&gt;pip lock&lt;/code&gt; command:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;pip&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; lock&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;\r&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;equirements.txt&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --output&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pylock.toml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;uv&lt;/code&gt; 0.6.15+ adds support through &lt;code&gt;uv export&lt;/code&gt; command:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; export&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --format&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pylock.toml&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --output-file&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pylock.toml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;pdm&lt;/code&gt; 2.24+ also supports exporting to &lt;code&gt;pylock.toml&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;pdm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; export&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --format&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pylock&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --output&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pylock.toml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://thisdavej.com/share-python-scripts-like-a-pro-uv-and-pep-723-for-easy-deployment/&quot;&gt;Share Python Scripts Like a Pro: uv and PEP 723 for Easy Deployment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Sharing single-file Python scripts with external dependencies is now easy thanks to &lt;code&gt;uv&lt;/code&gt; and PEP 723, which enable embedding dependency metadata directly within scripts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pybit.es/articles/developing-and-testing-python-packages-with-uv/&quot;&gt;Case Study: Developing and Testing Python Packages with uv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This article highlights the simplicity of initializing a project with &lt;code&gt;uv&lt;/code&gt;, which sets up essential files like &lt;code&gt;pyproject.toml&lt;/code&gt;, &lt;code&gt;README.md&lt;/code&gt;, and folder structures. This allows developers to manage dependencies effortlessly and set up virtual environments. It emphasizes the convenience of editable installations, enabling instant updates to package code without needing reinstallation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ai.meta.com/blog/llama-4-multimodal-intelligence/&quot;&gt;The Llama 4 herd: The beginning of a new era of natively multimodal AI innovation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Meta has introduced Llama 4, its latest suite of multimodal AI models including “Llama 4 Scout” and “Llama 4 Maverick”, offering significant advancements in personalized AI experiences. Both models utilize a mixture-of-experts (MoE) architecture, allowing efficient use of parameters: Maverick has 17 billion active parameters with 128 experts, while Scout offers a remarkable context length of 10 million tokens. “Llama 4 Behemoth”, a larger model with 288 billion parameters, serves as a teacher for the others, enhancing their capabilities.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.googleblog.com/en/agent-development-kit-easy-to-build-multi-agent-applications/&quot;&gt;Agent Development Kit: Making it easy to build multi-agent applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.googleapis.com/gweb-cloudblog-publish/images/Multi-agent_systems_with_Vertex_.max-2500x2500.jpg&quot; alt=&quot;google-vertex-ai-multi-agent&quot;&gt;&lt;/p&gt;
&lt;p&gt;Google brings its own agent-building solution by announcing open-source framework &lt;strong&gt;Agent Development Kit (ADK)&lt;/strong&gt; at &lt;a href=&quot;https://cloud.withgoogle.com/next/25&quot;&gt;Google Cloud NEXT 2025&lt;/a&gt;, additionally it introduces &lt;a href=&quot;https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/&quot;&gt;Agent2Agent (A2A) protocol&lt;/a&gt;, &lt;a href=&quot;https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/overview&quot;&gt;Agent Engine&lt;/a&gt; as well as &lt;a href=&quot;https://console.cloud.google.com/vertex-ai/agents/agent-garden&quot;&gt;Agent Garden&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/gpt-4-1/&quot;&gt;Introducing GPT-4.1 in the API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GPT‑4.1, GPT‑4.1 mini, and GPT‑4.1 nano are available through OpenAI’s API service. These new models appear to focus mainly on coding and instruction following.&lt;/p&gt;
&lt;p&gt;Update: They are also available through Github Models.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/introducing-o3-and-o4-mini/&quot;&gt;Introducing OpenAI o3 and o4-mini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenAI then release o3 and o4-mini of the o-series models, claiming they are their “smartest” models to date.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/exploring-gen-ai.html#memo-13&quot;&gt;The role of developer skills in agentic coding&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This article discusses the role of developer skills in agentic coding with AI assistants. The author categorizes AI missteps into three impact radius: time to commit, team flow, and long-term maintainability. The article emphasizes the need for developer oversight, caution against “good enough” solutions, and the importance of code quality practices and team communication.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://read.highgrowthengineer.com/p/mcps-simply-explained&quot;&gt;MCP (Model Context Protocol): Simply explained in 5 minutes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6de5b04a-5e6c-47cf-a81e-e332dd3570df_2906x990.png&quot; alt=&quot;mcp-diagram&quot;&gt;&lt;/p&gt;
&lt;p&gt;Model Context Protocol is a way for LLMs to integrate with external tools. It is useful as it makes LLMs act more like developers. Behind the scenes, providers create MCP-compliant wrappers. Resources for MCP are also provided.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hardcoresoftware.learningbyshipping.com/p/230-mcp-its-hot-but-will-it-win&quot;&gt;MCP - It’s Hot, But Will It Win?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the author’s point of view, while MCP is popular, its success is uncertain. Middleware like MCP often fails to live up to expectations. It may face issues such as monetization problems if widely adopted or exclusion by a key platform. Vendors may lose interest due to market realities.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://elenacross7.medium.com/%EF%B8%8F-the-s-in-mcp-stands-for-security-91407b33ed6b&quot;&gt;The “S” in MCP stands for Security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Despite its benefits, such as standardized APIs and persistent sessions, MCP has significant security risks. These risks include potential side-channels into shells, secrets, or infrastructure when agents are connected to arbitrary servers without proper security measures. The author emphasizes the need for better security in MCP to prevent these vulnerabilities.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.newsletter.swirlai.com/p/mcp-vs-a2a-friends-or-foes&quot;&gt;MCP vs. A2A: Friends or Foes?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MCP standardizes how applications integrate with large language models (LLMs), while A2A facilitates communication between agents across different systems. Although MCP currently excels in establishing context for LLMs, it lacks essential features like security and task management, which A2A addresses. As both protocols evolve, their roles may intertwine, but A2A appears poised for dominance in inter-agent communication, potentially overshadowing MCP’s relevance in the future.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/&quot;&gt;Git turns 20: A Q&amp;amp;A with Linus Torvalds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://github.blog/wp-content/uploads/2025/04/GitTurns20_BlogHeader_001-2.png?w=1600&quot; alt=&quot;git-turns-twenty&quot;&gt;&lt;/p&gt;
&lt;p&gt;To celebrate two decades of Git, the author sat down with Linus himself to revisit those early days, explore the key design decisions behind Git’s lasting success, and discuss how it forever changed software development. The full video interview is also included in the blog.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nmn.gl/blog/dangers-vibe-coding&quot;&gt;Karpathy’s ‘Vibe Coding’ Movement Considered Harmful&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The author argues that Karpathy’s “vibe coding” is harmful. It leads to hidden costs, exponential technical debt, and security risks. A better approach is to use AI with a clear vision, break down AI-generated code, provide context, test thoroughly, and review code to maintain understanding.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/train-reranker&quot;&gt;Training and Finetuning Reranker Models with Sentence Transformers v4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this blogpost, the author shows how to use sentence-transformers to finetune a reranker model that beats all existing options on exactly your data. This method can also train extremely strong new reranker models from scratch.&lt;/p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;Podcasts&lt;/h2&gt;
&lt;h3 id=&quot;-corepy&quot;&gt;🥝 core.py&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://open.spotify.com/episode/6UTlYsa61miMc9vwCaAyWm&quot;&gt;Episode 21: A Garbage Episode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-realpython-podcast&quot;&gt;🐍 RealPython Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/245/&quot;&gt;Episode 245: GUIs &amp;amp; TUIs: Choosing a User Interface for Your Python Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/246/&quot;&gt;Episode 246: Learning Intermediate Python With a Deep Dive Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/247/&quot;&gt;Episode 247: Exploring DuckDB &amp;amp; Comparing Python Expressions vs Statements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-python-bytes-podcast&quot;&gt;🥧 Python Bytes Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/426/committing-to-formatted-markdown&quot;&gt;#426 Committing to Formatted Markdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/427/rise-of-the-python-lord&quot;&gt;#427 Rise of the Python Lord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/428/how-old-is-your-python&quot;&gt;#428 How old is your Python?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/429/nitpicking-python&quot;&gt;#429 Nitpicking Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/430/or-you-go-to-jail&quot;&gt;#430 Or you go to jail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-talk-python-to-me&quot;&gt;🦜 Talk Python to me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/499/beeware-and-the-state-of-python-on-mobile&quot;&gt;#499: BeeWare and the State of Python on Mobile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/500/django-simple-deploy-and-other-devops-things&quot;&gt;#500: Django Simple Deploy and other DevOps Things&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/501/marimo-reactive-notebooks-for-python&quot;&gt;#501: Marimo - Reactive Notebooks for Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/502/django-ledger-accounting-with-python&quot;&gt;#502: Django Ledger: Accounting with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/503/the-pyarrow-revolution&quot;&gt;#503: The PyArrow Revolution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-pybites-podcast&quot;&gt;🍕 Pybites Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/16903500-185-expanding-the-world-of-pybites-with-cohort-coaching-book-platforms-and-more&quot;&gt;#185: Expanding the world of Pybites with cohort coaching, book platforms and more!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/16944372-186-rethinking-the-art-of-coding&quot;&gt;#186: Rethinking the art of coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/16974259-187-beyond-the-resume-how-to-stand-out-in-the-competitive-world-of-tech&quot;&gt;#187: Beyond the resume - how to stand out in the competitive world of tech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/17013337-188-career-crossroads-navigating-the-path-to-job-fulfillment&quot;&gt;#188: Career crossroads - navigating the path to job fulfillment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;repositories&quot;&gt;Repositories&lt;/h2&gt;
&lt;h3 id=&quot;googleadk-python-apache-20&quot;&gt;&lt;code&gt;google/adk-python&lt;/code&gt; (Apache-2.0)&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/google/adk-python&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;awslabsmcp-apache-20&quot;&gt;&lt;code&gt;awslabs/mcp&lt;/code&gt; (Apache-2.0)&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/awslabs/mcp&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;github-mcp-server-mit&quot;&gt;&lt;code&gt;github-mcp-server&lt;/code&gt; (MIT)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a2926942-1c3d-4f95-bb73-861d8003aecb&quot; alt=&quot;github-mcp-server&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/github-mcp-server&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;internvl3-78b&quot;&gt;&lt;code&gt;InternVL3-78B&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://huggingface.co/OpenGVLab/InternVL3-78B&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;moonshotaikimi-vl-a3b-thinking&quot;&gt;&lt;code&gt;moonshotai/Kimi-VL-A3B-Thinking&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://huggingface.co/moonshotai/Kimi-VL-A3B-Thinking&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;thudmglm-z1-32b-0414&quot;&gt;&lt;code&gt;THUDM/GLM-Z1-32B-0414&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://huggingface.co/THUDM/GLM-Z1-32B-0414&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;qwen-3&quot;&gt;&lt;code&gt;Qwen 3&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://huggingface.co/Qwen/Qwen3-235B-A22B&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;have-time-for-some-fun&quot;&gt;Have time for some fun?&lt;/h2&gt;
&lt;h3 id=&quot;nintendo-switch-2-has-a-launch-date&quot;&gt;Nintendo Switch 2 has a launch date&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://assets-prd.ignimgs.com/2025/01/16/screenshot-161-1737034377908.png&quot; alt=&quot;nintendo-switch-2&quot;&gt;&lt;/p&gt;
&lt;p&gt;Nintendo reveals in their “Direct” livestream event that Switch 2 is available on June 5th, 2025 worldwide with starting price ~$449.99 outside Japan (multi-language version) and a much lower price inside Japan (Japanese-only version). Read more about it on their &lt;a href=&quot;https://www.nintendo.com/us/gaming-systems/switch-2/&quot;&gt;official website&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;clair-obscur-expedition-33-sets-sail-on-april-24th&quot;&gt;Clair Obscur: Expedition 33 sets sail on April 24th&lt;/h3&gt;
&lt;p&gt;In this dark fantasy RPG inspired by JRPG and Soul-like games and made by a small French team “Sandfall Interactive”, players will explore the mysterious city of Lumière and engage in immersive turn-based battles with unique mechanics. After playing it for around 30 hours I must say I really enjoyed the visual style and the rewarding action part in the battles. Check their &lt;a href=&quot;https://www.expedition33.com/&quot;&gt;official website&lt;/a&gt; for more info.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Alright, that concludes the second 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 May!&lt;/p&gt;
</description><pubDate>Wed, 30 Apr 2025 07:00:00 GMT</pubDate><category>python</category><category>python</category><category>cli</category><category>linux</category><category>windows</category><category>news</category><author>Zeyang Lin</author></item><item><title>This Month for Pythonistas - March 2025</title><link>https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-03/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-03/</guid><description>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(date.today().year, date.today().month)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2025 3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;issue-2025-03&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;640&quot; height=&quot;360&quot; src=&quot;/_astro/splash.CdmkBjaR_ZC4sN7.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Welcome and thank you for reading &lt;strong&gt;This Month for Pythonistas&lt;/strong&gt;, a monthly update dedicated to Python developers, professionals, and hobbyists.&lt;/p&gt;
&lt;p&gt;In this &lt;em&gt;inaugural&lt;/em&gt; issue, I would like to compile a list of news, articles, repositories, and tools worth noting in March 2025, as well as other fun stuff that may not necessarily be bound to Python community.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across several platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2025-03/&quot;&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-03/&quot;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2025-03/&quot;&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let’s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;events--social&quot;&gt;Events &amp;amp; Social&lt;/h2&gt;
&lt;h3 id=&quot;europython-2025-updates&quot;&gt;EuroPython 2025 Updates&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://ep2025.europython.eu/&quot;&gt;EuroPython 2025&lt;/a&gt; stays in Prague, Czech Republic (which makes Prague the host city three years in a row!), and the ticket sales start this month.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.europython.eu/content/images/2025/03/savannah-2.svg&quot; alt=&quot;europython-2025-keynote-speaker&quot;&gt;&lt;/p&gt;
&lt;p&gt;Python Core Developer &lt;a href=&quot;https://www.linkedin.com/in/savannahostrowski/&quot;&gt;Savannah Ostrowski&lt;/a&gt; is going to be one of the keynote speakers this year.&lt;/p&gt;
&lt;p&gt;Get to know more in their &lt;a href=&quot;https://blog.europython.eu/keynote-ticket-sales-announcement/&quot;&gt;blog&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;new-versions&quot;&gt;New versions&lt;/h2&gt;
&lt;h3 id=&quot;ipython-902&quot;&gt;&lt;code&gt;ipython&lt;/code&gt; 9.0.2&lt;/h3&gt;
&lt;p&gt;The first major version update in three years! Check it out on &lt;a href=&quot;https://pypi.org/project/ipython/9.0.2/&quot;&gt;pypi&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;dify-v113&quot;&gt;&lt;code&gt;dify&lt;/code&gt; v1.1.3&lt;/h3&gt;
&lt;p&gt;This major update (v1) brings a plugin system, a new Agent node in workflow, “Extenstion”, “Dify Marketplace”, and more!&lt;/p&gt;
&lt;p&gt;Check this particular release on &lt;a href=&quot;https://github.com/langgenius/dify/releases/tag/1.1.3&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;tutorials&quot;&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/event-driven-agentic-document-workflows/&quot;&gt;Event-Driven Agentic Document Workflows&lt;/a&gt; from LlamaIndex&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Build an event-driven agentic workflow that parses forms, retrieves relevant information from a source document using RAG, and returns answers to the form’s fields as structured outputs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/long-term-agentic-memory-with-langgraph/&quot;&gt;Long-Term Agentic Memory with LangGraph&lt;/a&gt; from LangChain&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Build a personal email agent with routing, writing, scheduling tools to automatically ignore, respond to, or notify about incoming emails.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;RealPython’s &lt;a href=&quot;https://realpython.com/langgraph-python/&quot;&gt;LangGraph: Build Stateful AI Agents in Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is another tutorial regarding &lt;code&gt;LangGraph&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Explore the full tutorial to gain hands-on experience with LangGraph, including setting up workflows and building a LangGraph agent that can autonomously parse emails, send emails, and interact with API services.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;RealPython’s &lt;a href=&quot;https://realpython.com/instance-class-and-static-methods-demystified/&quot;&gt;Python’s Instance, Class, and Static Methods Demystified&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Instance, class, and static methods each serve a distinct role in Python, and knowing when to use one over another is key to writing clean, maintainable code. Instance methods operate on individual objects using self, while class methods use cls to access class-level data. Static methods, on the other hand, provide organizational structure without relying on class or instance state.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;RealPython’s &lt;a href=&quot;https://realpython.com/python-code-quality/&quot;&gt;Python Code Quality: Best Practices and Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;In this tutorial, you’ll learn about code quality and the key factors that make Python code high-quality. You’ll explore effective strategies, powerful tools, and best practices to elevate your code to the next level.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;articles&quot;&gt;Articles&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.nelhage.com/post/cpython-tail-call/&quot;&gt;Performance of the Python 3.14 tail-call interpreter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CPython project’s new tail-call interpreter initially showed a 10 - 15% performance boost. However, the author found this was mainly due to an LLVM 19 regression. When benchmarked against better baselines, the gain dropped to 1 - 5%. The LLVM 19 regression affected the bytecode interpreter’s optimization. Also, the “computed goto” approach might be unnecessary for modern Clang.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/new-tools-for-building-agents/&quot;&gt;New tools for building agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenAI introduces their new approach on building agents systems: the new Responses API which would replace Assistants API, a new Python SDK as a agents framework, and more.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.google/technology/developers/gemma-3/&quot;&gt;Google’s Gemma 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.googleapis.com/gweb-uniblog-publish-prod/images/Gemma3_KeywordBlog_RD3_V01b.width-2200.format-webp.webp&quot; alt=&quot;gemma-3&quot;&gt;&lt;/p&gt;
&lt;p&gt;Latest iteration of Google’s open-weight LLM includes four sizes from small to medium: 1B, 4B, 12B, and 27B. Here’s the &lt;a href=&quot;https://storage.googleapis.com/deepmind-media/gemma/Gemma3Report.pdf&quot;&gt;technical report&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mistral.ai/news/mistral-small-3-1&quot;&gt;Mistral Small 3.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mistral releases its newest “small” (24B) multi-modal, multilingual LLM, claiming it “outperforms comparable models like Gemma 3 and GPT-4o Mini, while delivering inference speeds of 150 tokens per second”.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cms.mistral.ai/assets/1977a3f1-eae3-4eed-b2c7-e1701c4692ed.png?width=1988&amp;amp;height=1050&quot; alt=&quot;mistral-small-3.1-performance&quot;&gt;&lt;/p&gt;
&lt;p&gt;Its “instruct” variation’s weight is obtainable from &lt;a href=&quot;https://huggingface.co/mistralai/Mistral-Small-3.1-24B-Instruct-2503&quot;&gt;HuggingFace&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://a16z.com/a-deep-dive-into-mcp-and-the-future-of-ai-tooling/&quot;&gt;A Deep Dive Into MCP and the Future of AI Tooling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://d1lamhf6l6yk6d.cloudfront.net/uploads/2025/03/250319-MCP-x2000.png&quot; alt=&quot;model-context-protocol&quot;&gt;&lt;/p&gt;
&lt;p&gt;This article delves into the Model Context Protocol (MCP), an open protocol aiming to standardize AI model interactions with tools. Inspired by LSP, MCP supports autonomous AI workflows and human-in-the-loop operations. It has various use cases in dev-centric workflows and net-new experiences. However, the MCP ecosystem is in its early stage, facing challenges like authentication, authorization, and server discoverability. If these issues are resolved, MCP could reshape AI-tool interactions, leading to new pricing models, hosting modes, and a shift in tool development and consumption.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/blog/introducing-kblam-bringing-plug-and-play-external-knowledge-to-llms/&quot;&gt;Introducing KBLaM: Bringing plug-and-play external knowledge to LLMs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2025/03/KBLaM-BlogHeroFeature-1400x788-1-1.png&quot; alt=&quot;kblam-diagram&quot;&gt;&lt;/p&gt;
&lt;p&gt;KBLaM is a new approach to integrate structured knowledge bases into pre-trained LLMs. Traditional methods like fine-tuning and RAG have drawbacks, and in-context learning has computational issues. KBLaM converts knowledge bases into continuous key-value vector pairs and uses rectangular attention for efficient integration. It’s scalable, with linear cost and dynamic updates. KBLaM also enhances interpretability and reliability, reducing hallucinations. It paves the way for more reliable AI systems in critical fields.&lt;/p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;Podcasts&lt;/h2&gt;
&lt;h3 id=&quot;-corepy&quot;&gt;🥝 core.py&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://open.spotify.com/episode/3SSIu0lvHD1jT8m23VSBFB&quot;&gt;Episode 19: Async hacks, unicorns and velociraptors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://open.spotify.com/episode/4tB8m8DyUv6PDR1DvVJFKd&quot;&gt;Episode 20: Remote Code Execution By Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-realpython-podcast&quot;&gt;🐍 RealPython Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/241/&quot;&gt;Episode 241: Deciphering Python Jargon &amp;amp; Compiling Python 1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/242/&quot;&gt;Episode 242: Eric Matthes: Maybe Don’t Start With Unit Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/243/&quot;&gt;Episode 243: Manage Projects With pyproject.toml &amp;amp; Explore Polars LazyFrames&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/244/&quot;&gt;Episode 244: A Decade of Automating the Boring Stuff With Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-python-bytes-podcast&quot;&gt;🥧 Python Bytes Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/422/you-need-4-spaces&quot;&gt;#422 You need 4 spaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/423/traveling-the-python-universe&quot;&gt;#423 Traveling the Python Universe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/424/we-will-test-in-production&quot;&gt;#424 We Will Test in Production&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/425/if-you-were-a-klingon-programmer&quot;&gt;#425 If You Were a Klingon Programmer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-talk-python-to-me&quot;&gt;🦜 Talk Python to me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/496/scaf-complete-blueprint-for-new-python-kubernetes-projects&quot;&gt;#496: Scaf: Complete blueprint for new Python Kubernetes projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/497/outlier-detection-with-python&quot;&gt;#497: Outlier Detection with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/498/algorithms-for-high-performance-terminal-apps&quot;&gt;#498: Algorithms for high performance terminal apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-pybites-podcast&quot;&gt;🍕 Pybites Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/16730593-183-ai-s-silent-takeover-are-we-losing-our-programming-skills&quot;&gt;#183: AI’s silent takeover - are we losing our programming skills?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/16755254-184-the-pathway-to-success-how-an-open-mind-can-lead-to-your-dream-job&quot;&gt;#184: The pathway to success - how an open mind can lead to your dream job&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;
&lt;h3 id=&quot;warp-on-windows&quot;&gt;Warp on Windows&lt;/h3&gt;
&lt;p&gt;Warp is one of my favorite new toys in year 2024, and now it comes to Windows platform. Check their &lt;a href=&quot;https://www.warp.dev/blog/launching-warp-on-windows&quot;&gt;blog&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id=&quot;cherry-studio-1110&quot;&gt;Cherry Studio 1.1.10&lt;/h3&gt;
&lt;p&gt;Cherry Studio catches quite a lot of eyes recently, and it just reaches 1.0 not too long ago. &lt;a href=&quot;https://cherry-ai.com/download&quot;&gt;official download&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;repositories&quot;&gt;Repositories&lt;/h2&gt;
&lt;h3 id=&quot;lmstudio-python-mit&quot;&gt;&lt;code&gt;lmstudio-python&lt;/code&gt; (MIT)&lt;/h3&gt;
&lt;p&gt;I personally have been using &lt;a href=&quot;https://lmstudio.ai/&quot;&gt;LM Studio&lt;/a&gt; for roughly one year, and this &lt;code&gt;lmstudio-python&lt;/code&gt; (alongside lmstudio-js for JavaScript) is their official SDK with which you can easily manage the models, conversations and more using pure Python code. They have documentations too: &lt;a href=&quot;https://lmstudio.ai/docs/python&quot;&gt;docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The source code is hosted on &lt;a href=&quot;https://github.com/lmstudio-ai/lmstudio-python&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;openai-agents-python-mit&quot;&gt;&lt;code&gt;openai-agents-python&lt;/code&gt; (MIT)&lt;/h3&gt;
&lt;p&gt;OpenAI’s latest contribution to open-source includes this framework for creating multi-agent workflows. This is also among the new toys from OpenAI which I mentioned earlier in this issue.&lt;/p&gt;
&lt;p&gt;The source code is on &lt;a href=&quot;https://github.com/openai/openai-agents-python&quot;&gt;github&lt;/a&gt;, and the &lt;a href=&quot;https://openai.github.io/openai-agents-python/&quot;&gt;documentation&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;Update: The Agents SDK has support for MCP, which means you can now &lt;a href=&quot;https://openai.github.io/openai-agents-python/mcp/&quot;&gt;connect MCP servers to Agents&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;smolagents-apache-20&quot;&gt;&lt;code&gt;smolagents&lt;/code&gt; (Apache-2.0)&lt;/h3&gt;
&lt;p&gt;Another light-weight (“smol”) framework which helps you build AI agents, brought by the HuggingFace team.&lt;/p&gt;
&lt;p&gt;Here’s the &lt;a href=&quot;https://github.com/huggingface/smolagents&quot;&gt;repostitory&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;deepseek-v3-0324&quot;&gt;&lt;code&gt;DeepSeek-V3-0324&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The is an updated version of V3, released just this March. The weights can be found on &lt;a href=&quot;https://huggingface.co/deepseek-ai/DeepSeek-V3-0324&quot;&gt;HuggingFace&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;qwen25-omni-7b&quot;&gt;&lt;code&gt;Qwen2.5-Omni-7B&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Qwen team has released &lt;em&gt;their&lt;/em&gt; version of “omni” model on &lt;a href=&quot;https://huggingface.co/Qwen/Qwen2.5-Omni-7B&quot;&gt;HuggingFace&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;have-time-for-some-fun&quot;&gt;Have time for some fun?&lt;/h2&gt;
&lt;h3 id=&quot;command--conquer-games-go-open-source&quot;&gt;Command &amp;amp; Conquer games go open-source&lt;/h3&gt;
&lt;p&gt;Despite their infamous and disastrous management on this beloved franchise, EA chose to open-source some of the classic C&amp;amp;C games on github, potentially enriching the Modding community support.&lt;/p&gt;
&lt;p&gt;Here are the repositories (Mostly C++, plus some C, Assembly and others; under GNU GPL v3):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/electronicarts/CnC_Tiberian_Dawn&quot;&gt;Tiberian Dawn (1995)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/electronicarts/CnC_Red_Alert&quot;&gt;Red Alert (1996)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/electronicarts/CnC_Renegade&quot;&gt;Renegade (2002)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/electronicarts/CnC_Generals_Zero_Hour&quot;&gt;Generals (2003) and Generals: Zero Hour (2003)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;death-stranding-2-on-the-beach-finally-has-a-launch-date&quot;&gt;Death Stranding 2: On the Beach (finally) has a launch date&lt;/h3&gt;
&lt;p&gt;It would be on the shelves on June 26th (or 24th for Deluxe Edition owners), 2025 for Playstation only (… for a while at least), and the pre-order starts March 17th.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.playstation.com/tachyon/2025/03/39b76949d94b8c18a90f34664c1ff989b8afee67-scaled.jpg?fit=1024%2C576&amp;amp;zoom=1&quot; alt=&quot;death-stranding-2-digital-standard-edition&quot;&gt;&lt;/p&gt;
&lt;p&gt;The price starts from 69.99 USD, 79.99 EUR, 568 HKD or 8,980 JPY.&lt;/p&gt;
&lt;p&gt;More details can be found in this &lt;a href=&quot;https://blog.playstation.com/2025/03/09/death-stranding-2-on-the-beach-launches-june-26-collectors-edition-revealed/&quot;&gt;playstation blog&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;starcraft-goes-to-tabletop&quot;&gt;StarCraft goes to tabletop&lt;/h3&gt;
&lt;p&gt;In their &lt;a href=&quot;https://archon-studio.com/blog/starcraft-tmg/starcraft-tabletop-miniatures-game-announcement&quot;&gt;blog&lt;/a&gt;, Archon Studio announced an official partnership with Blizzard Entertainment, launching a StarCraft tabletop miniatures game in 2026, followed by board games set in the StarCraft universe in 2027.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://archon-studio.com/files/scaled-thumbs/Blog/starcraft-tabletop-miniatures-game-announcement/SC%201x1%20announcement.png/1200_1200.webp&quot; alt=&quot;starcraft-miniatures&quot;&gt;&lt;/p&gt;
&lt;p&gt;More details, like miniature previews and gameplay mechanics, will be revealed later in 2025.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Alright, that concludes the very first 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 April!&lt;/p&gt;
</description><pubDate>Mon, 31 Mar 2025 07:00:00 GMT</pubDate><category>python</category><category>python</category><category>cli</category><category>linux</category><category>windows</category><category>news</category><author>Zeyang Lin</author></item><item><title>UV is the latest attempt to rule All Python tools</title><link>https://blueberrypy.netlify.app/post/uv-is-latest-attempt-to-rule-them-all/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/uv-is-latest-attempt-to-rule-them-all/</guid><description>&lt;p&gt;In short, &lt;a href=&quot;https://github.com/astral-sh/uv&quot;&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt; is a command line tool written in &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;&lt;code&gt;Rust&lt;/code&gt;&lt;/a&gt; for &lt;code&gt;Python&lt;/code&gt; developers, which aims to be &lt;em&gt;“a comprehensive project and package manager that is extremely fast, reliable, and easy to use”&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If you are still interested, I hope you can spend a couple of minutes so that I can give you a quick tour of it.&lt;/p&gt;
&lt;h2 id=&quot;quick-fact-sheet&quot;&gt;Quick fact sheet&lt;/h2&gt;
&lt;p&gt;language: Rust&lt;/p&gt;
&lt;p&gt;version: 0.1.13 (at the time of updating this post)&lt;/p&gt;
&lt;p&gt;repo: &lt;a href=&quot;https://github.com/astral-sh/uv&quot;&gt;github&lt;/a&gt; (6k stars)&lt;/p&gt;
&lt;p&gt;pypi: &lt;a href=&quot;https://pypi.org/project/uv/&quot;&gt;pypi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;docs: N/A&lt;/p&gt;
&lt;p&gt;supported python versions: 3.8 through 3.12 (inclusive)&lt;/p&gt;
&lt;p&gt;supported os: Windows, Linux, MacOS&lt;/p&gt;
&lt;h2 id=&quot;drop-in-replacement-for-pip-and-more&quot;&gt;Drop-in replacement for pip and more&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;uv&lt;/code&gt; is from the creator of &lt;a href=&quot;https://github.com/astral-sh/ruff&quot;&gt;&lt;code&gt;ruff&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/charliermarsh&quot;&gt;Charlie Marsh&lt;/a&gt; and &lt;a href=&quot;https://github.com/astral-sh/&quot;&gt;astralsh&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ruff&lt;/code&gt;, the linting and formating tool written is Rust as well, has already gain fame and popularity during the past year or so, and I believe many of Python developers have been using it for quite a while.&lt;/p&gt;
&lt;p&gt;And &lt;code&gt;uv&lt;/code&gt; is no doubt their next step in improving the Python toolchain eco.&lt;/p&gt;
&lt;p&gt;Although you can easily install &lt;code&gt;uv&lt;/code&gt; using &lt;code&gt;pip&lt;/code&gt; or &lt;code&gt;pipx&lt;/code&gt; just like any other Python tool,
essentially it does not rely on your Python interpreter to be installed.&lt;/p&gt;
&lt;p&gt;It provides just the binary executable and you can get it easily by running the quick script following
the insructions in its git repo. And that’s it, no Python or Rust runtime required till this point.&lt;/p&gt;
&lt;p&gt;Creating a virtual environment is now as easy as &lt;code&gt;uv venv&lt;/code&gt;, though you now need at least one Python interpreter ready to make it work.&lt;/p&gt;
&lt;p&gt;The virtual env it creates is just a standard Python venv, except it does not include &lt;code&gt;pip&lt;/code&gt; by default (however if you need pip, you can let it be included by using an extra flag, or you could install it manually anytime after).&lt;/p&gt;
&lt;p&gt;Some of your daily commands can then be like (but faster):&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pip&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; requirements.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pip&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; black==&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;24.2.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pip&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; compile&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pyprojects.toml&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -o&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; requirements.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;fast-in-deed&quot;&gt;Fast in deed&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;speed-comparison-1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1136&quot; height=&quot;301&quot; src=&quot;/_astro/image-01.ae05VlAD_SG90D.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;speed-comparison-2&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1163&quot; height=&quot;275&quot; src=&quot;/_astro/image-02.XSkMg7EH_Z2gbQo8.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Just like &lt;code&gt;ruff&lt;/code&gt; is known as being an extremely fast linter, &lt;code&gt;uv&lt;/code&gt;’s speed is also impressive.&lt;/p&gt;
&lt;p&gt;Here is a short &lt;code&gt;requirements.txt&lt;/code&gt; from one of my repos:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fastapi==0.109.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pydantic[email]==2.6.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;python-multipart==0.0.9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;uvicorn[standard]==0.27.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;coverage&amp;gt;=7.4.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;httpx&amp;gt;=0.26.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;memray&amp;gt;=1.11.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pytest&amp;gt;=8.0.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And I gave &lt;code&gt;uv&lt;/code&gt; a try using github actions. The result on &lt;code&gt;ubuntu-latest&lt;/code&gt; with Python 3.12 looks like this&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;gt; Run uv pip install -r requirements.dev.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Resolved 40 packages in 185ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Downloaded 40 packages in 268ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Installed 40 packages in 24ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + annotated-types==0.6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + anyio==4.3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + certifi==2024.2.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + click==8.1.7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + coverage==7.4.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + dnspython==2.6.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + email-validator==2.1.0.post1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + fastapi==0.109.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + h11==0.14.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + httpcore==1.0.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + httptools==0.6.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + httpx==0.26.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + idna==3.6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + iniconfig==2.0.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + jinja2==3.1.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + linkify-it-py==2.0.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + markdown-it-py==3.0.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + markupsafe==2.1.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + mdit-py-plugins==0.4.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + mdurl==0.1.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + memray==1.11.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + packaging==23.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + pluggy==1.4.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + pydantic==2.6.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + pydantic-core==2.16.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + pygments==2.17.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + pytest==8.0.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + python-dotenv==1.0.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + python-multipart==0.0.9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + pyyaml==6.0.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + rich==13.7.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + sniffio==1.3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + starlette==0.36.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + textual==0.52.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + typing-extensions==4.9.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + uc-micro-py==1.0.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + uvicorn==0.27.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + uvloop==0.19.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + watchfiles==0.21.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; + websockets==12.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, this process, including solving the dependencies, downloading them and installing them, took just &lt;strong&gt;less than half a second&lt;/strong&gt;!&lt;/p&gt;
&lt;h2 id=&quot;features-in-need&quot;&gt;Features in need&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;uv&lt;/code&gt;’s vision, according to the blog, is&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a single binary that bootstraps your Python installation and gives you everything you need to be productive with Python, bundling not only pip, pip-tools, and virtualenv, but also pipx, tox, poetry, pyenv, ruff, and more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And appearantly at the current point, it is still quite far away from that.&lt;/p&gt;
&lt;p&gt;The only two major top-level sub-commands the cli currently supports are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;venv&lt;/li&gt;
&lt;li&gt;pip&lt;/li&gt;
&lt;li&gt;cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It thus can only create a virtual environment, install dependencies into it and outputs a “lock” file, etc.&lt;/p&gt;
&lt;p&gt;I want it to list installed packages, or run commands using the interpreter inside the virtual env, just like what &lt;code&gt;poetry&lt;/code&gt; is capable of right now.&lt;/p&gt;
&lt;p&gt;Not to mention that it cannot run tests, switch virtual environments or lint source files.&lt;/p&gt;
&lt;p&gt;But it’s still in its early age, and the pace is like one patch version every couple of days, isn’t it?&lt;/p&gt;
&lt;h2 id=&quot;what-about-rye&quot;&gt;What about Rye&lt;/h2&gt;
&lt;p&gt;The ambitions of &lt;code&gt;uv&lt;/code&gt; share a lot with those from &lt;code&gt;Rye&lt;/code&gt;, a tool (which happens to be written in Rust as well) created by Armin Ronacher, the creator of &lt;code&gt;Flask&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;What’s more, the team behind &lt;code&gt;uv&lt;/code&gt;, &lt;code&gt;astralsh&lt;/code&gt;, is actually taking over the dev work of &lt;code&gt;Rye&lt;/code&gt; according to their &lt;a href=&quot;https://astral.sh/blog/uv&quot;&gt;blog&lt;/a&gt;, and ultimately going to migrate &lt;code&gt;Rye&lt;/code&gt; to &lt;code&gt;uv&lt;/code&gt; in the future.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We saw this as a rare opportunity to team up, and to avoid fragmenting the Python ecosystem. As such, in collaboration with Armin, we’re excited to be taking over Rye. Our goal is to evolve uv into a production-ready “Cargo for Python”, and to provide a smooth migration path from Rye to uv when the time is right.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;some-thoughts&quot;&gt;Some thoughts&lt;/h2&gt;
&lt;p&gt;The name &lt;code&gt;uv&lt;/code&gt; seems not relevant to &lt;a href=&quot;https://github.com/libuv/libuv&quot;&gt;&lt;code&gt;libuv&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/MagicStack/uvloop&quot;&gt;&lt;code&gt;uvloop&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://github.com/encode/uvicorn&quot;&gt;&lt;code&gt;uvicorn&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Maybe it’s short for “universal/ultimate/unified virtualenv manager”?&lt;/p&gt;
&lt;p&gt;The dedicated docs pages of &lt;code&gt;uv&lt;/code&gt; are not present at the time of writing, which is a pitty.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://astral.sh/blog/uv&quot;&gt;uv: Python packaging in Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/astral-sh/uv&quot;&gt;uv on Github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Wed, 21 Feb 2024 07:23:13 GMT</pubDate><category>rust</category><category>python</category><category>rust</category><category>python</category><category>pip</category><category>cli</category><category>linux</category><category>windows</category><author>Zeyang Lin</author></item></channel></rss>