<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CodeWeng Blog</title>
    <link>https://codeweng.com/</link>
    <description>Recent content on CodeWeng Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 07 Apr 2026 13:01:10 +0800</lastBuildDate><atom:link href="https://codeweng.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Python 依赖管理进化史：从 pip 到 uv</title>
      <link>https://codeweng.com/posts/python-dependencies-the-road-to-uv/</link>
      <pubDate>Tue, 07 Apr 2026 13:01:10 +0800</pubDate>
      
      <guid>https://codeweng.com/posts/python-dependencies-the-road-to-uv/</guid>
      
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;我有 C、.NET、Java 的开发背景，Python 语法基本属于看一眼就能上手的类型，但一直没有系统了解过。对 Python 的开发环境，之前的认知仅限于：venv 管虚拟环境、pip 装包、requirements.txt 管依赖。&lt;/p&gt;
&lt;p&gt;最近在读 Microsoft Agent Framework 的源码，发现它用 uv 和 poe 构建，于是决定顺着这条线把 Python 的依赖管理好好梳理一遍，顺便把笔记整理出来，分享给大家。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;uv-是什么&#34;&gt;UV 是什么？&lt;/h2&gt;
&lt;p&gt;简单粗暴地理解：&lt;strong&gt;uv 就是一个用 Rust 重写的、快得离谱的pip + pip-tools + pyenv 的集合体。&lt;/strong&gt; 它整合了以下这些工具的功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pip / pip-tools&lt;/strong&gt;：包安装与依赖解析&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;virtualenv / venv&lt;/strong&gt;：虚拟环境管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pipx&lt;/strong&gt;：全局安装 CLI 工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;poetry&lt;/strong&gt;：项目依赖与打包管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;twine&lt;/strong&gt;：包发布&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不过要真正理解 uv 好在哪里，得先把它所取代的这些工具各自过一遍，知道它们解决了什么问题、又留下了什么麻烦。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;关于-pip&#34;&gt;关于 pip&lt;/h2&gt;
&lt;p&gt;pip 是 Python 最基础的包管理工具，常用操作就这几条：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装包：&lt;/strong&gt; &lt;code&gt;pip install &amp;lt;包名&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;通过文件批量安装：&lt;/strong&gt; &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这是项目部署的标准做法，会自动安装文本文件中列出的所有库。&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;生成依赖清单：&lt;/strong&gt; &lt;code&gt;pip freeze &amp;gt; requirements.txt&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;它会扫描当前环境所有已安装的包，按 &lt;code&gt;包名==版本号&lt;/code&gt; 的格式写入文件。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
