在过去的一年左右时间里,我一直在用 Poetry 来管理 Python 的环境和包,它确实帮了我不少忙。不过,出于持续改进的精神和对新鲜事物的好奇心,我开始尝试一款叫做 uv 的工具,据说它可以进一步简化这些任务。我已经玩了它几个月的时间。
uv 是一个超快的 Python 包安装器和解析器,用 Rust 编写,设计上可以作为 pip
和 pip-tools
工作流的直接替代品。
如果你想了解更多关于 uv 的理念和发展历程,可以看看开发者们的 博客文章。
根据 uv 的文档,它的最大亮点之一就是速度。官方宣称能大幅减少包的安装时间,性能据说比 pip
快上100倍。你可以在 这里 查看那些令人印象深刻的基准测试结果。
这个速度潜力挺有意思,不过对我而言这并不是个关键因素,我的项目通常不复杂到需要担心这个问题。大多数时候,我手头有的只是原始数据和几个 Jupyter 笔记本或脚本。但 uv 确实比其他选项(比如 Pip 或 Poetry)更快,这一点总是好的。
另一个 uv 强调的功能是它在磁盘空间管理上的方法,类似于 Node.js 生态系统中 pnpm 的工作方式。uv
使用全局缓存来最小化冗余,确保相同的包只存储一次,不论有多少个项目需要用到它们。理论上,这种方法可以避免你的系统因为重复的包而变得臃肿不堪。
这一点一直让我很烦恼:为什么我要把同样的包重新安装到每个虚拟环境中,导致不必要的磁盘占用?现在好了,这问题解决了,真是让人开心。
像 ipykernel
这样的工具仍然需要在每个环境中安装以确保与 Jupyter 笔记本的正确集成。但目前为止,这个设置对我来说运行得非常好。我可以迅速启动新项目,并且感觉比起用 Poetry 时花在调整环境上的时间要少得多。
使用 uv 来处理 Python 安装也是一个非常有用的功能。以前我用的是 pyenv-win,但现在 uv 让我不再需要它。虽然 uv 的工作方式有些不同,但我喜欢它的简单。基本上,uv 会检查你的项目配置文件(当你初始化项目时自动创建,文件以 .toml
结尾),并为你安装必要的 Python 版本。如果你已经安装了所需的 Python 版本,那就好办了,它会识别出来并避免重复安装。
尽管大部分工程师主要是在 Windows 上工作,uv 提供的跨平台支持——涵盖 macOS、Linux 和 Windows——依然值得提一嘴。这一特性保证了如果你需要切换环境,无论是为了特定项目还是合作,你的设置都能保持一致。虽然我用的是 Windows,但知道 uv
能搞定其他平台也让人安心。到目前为止,我的体验非常顺畅。
有些开发人员提到在 Windows/Mac 和 Linux 之间转移项目时遇到了问题,但如果你是位结构工程师,在 Mac 上工作,放下你的手工可颂面包,振作起来吧。
我最喜欢 uv 的功能之一就是它创建虚拟环境的速度有多快多容易。
uv venv
用这条命令,你可以瞬间设置好一个隔离的环境,确保你的项目依赖项与其他项目井水不犯河水。uv
也会从全局缓存中复用包,使得常见的依赖项能够立即安装,进一步加快设置过程。默认情况下,VS Code 会自动识别你的 venv 并与项目同步。这是一个小细节,但却是一个非常贴心的生活质量提升。
通过利用缓存的包,uv
不仅节省了时间,还减少了项目间的冗余。这个功能真的很酷。
有时候东西不太正常,你可能想删除 .venv 文件夹,然后重新创建。超级简单快捷。
如果需要的话,你也可以指定自定义的 venv 名称(例如 my-env)或 Python 版本(例如 3.12.4)。我很少这样做,通常就用 ‘venv’ 作为名称。
uv venv my-env --python 3.12.4
uv sync
uv sync
命令旨在让你的虚拟环境与项目的依赖需求保持一致。当你运行:
uv sync
uv
会将当前环境状态与你在 requirements.txt
或 pyproject.toml
文件中指定的依赖进行对比(我个人更喜欢用 pyproject.toml
)。然后执行以下操作:
你可以在这里查看 uv 命令的详细列表,这样你就能了解你能做些什么。
这是一份毫不含糊的教程,目的是让你能够在本地机器上快速启动 Python,并通过 Jupyter Notebook 开始真正的工程工作。
这是我的80%项目的起点。
这份教程略过了 Python 项目设置的一些重要方面,但主要目标是帮助你起步。随着你逐渐熟悉,你会学到更多内部机制。
接下来的几步可能会显得有点晦涩难懂,别担心。随着经验的积累,你会明白 PowerShell 和命令提示符如何成为提高效率的强大工具。
如果你还没有安装最新版的 PowerShell,按照这里的说明进行安装 PowerShell 安装指南。
在这个教程中,我用的是 Version 7.4.5
。友情提示 - 安装可能需要几分钟,有时会比较慢。
打开 windows 命令提示符并运行:
winget install --id Microsoft.PowerShell --source winget
uv
并用它来管理 Python我建议进行一个干净的安装,以便更容易使用,所以假设你还没有安装 Python:
uv
:Invoke-WebRequest -Uri https://astral.sh/uv/install.ps1 -OutFile install.ps1; powershell -ExecutionPolicy Bypass -File ./install.ps1
现在 uv
已经安装好了,你可以用它来安装和管理 Python:
uv python install
uv python install 3.12.6
。uv python --version
之后,uv
就会接管你的 Python 安装管理工作。
使用 uv
来设置 Python 项目是一个高效且简洁的过程,特别适合那些希望通过 Jupyter Notebook 在 VS Code 中进行数据分析和工程计算的用户。以下是如何用 uv
快速搭建一个基本项目的步骤。
uv
设置 Python 项目uv
初始化创建项目文件夹:首先,在你想要存储项目文件的地方创建一个新的文件夹。这个文件夹将成为你的项目目录。你可以通过文件资源管理器或者直接在 PowerShell 中使用如下命令来创建它:
mkdir flocode_lean_startup
进入项目文件夹:创建完文件夹后,使用 PowerShell 进入该文件夹:
cd flocode_lean_startup
用 uv
初始化项目:在项目文件夹中,运行以下命令初始化项目:
uv init
这个命令会创建默认的项目结构,并设置必要的配置来管理 Python 依赖项。生成的结构通常包括:
flocode_lean_startup/
│
├── pyproject.toml # 依赖项和设置的主要配置文件
├── README.md # 项目描述和文档
└── src/ # 主要源代码目录
└── __init__.py # 将 src 初始化为 Python 包
如果你需要的话,现在可以创建并激活虚拟环境:
uv venv
激活虚拟环境:
.venv\Scripts\activate
一个不错的特性是,如果你还没有创建虚拟环境,uv
会在你向项目添加任何依赖项时自动创建一个。.venv
文件夹会被自动添加到项目的根目录,使得 VS Code 能够轻松找到它,并推荐作为首选的虚拟环境。这减少了额外的步骤,我真的很喜欢这一点,少了一件麻烦事。
ipykernel
)有了初始化的项目,你现在可以添加 ipykernel
包,这是如果你打算使用 Jupyter Notebooks 的必要条件:
uv add ipykernel
接下来,根据需要安装任何其他包。例如,你可能想要添加 pandas
用于数据操作:
uv add pandas
每个 uv add
命令都会将指定的包添加到虚拟环境中,使其可用于你的项目。
.toml
文件安装如果你有一个带有 .toml
文件(例如,来自 GitHub 的 flocode 项目),你可以通过运行以下命令轻松安装依赖项:
uv sync
此命令会将 pyproject.toml
和 uv.lock
文件中指定的所有依赖项安装或更新到项目的虚拟环境中,确保你的环境与声明的依赖项匹配。
一旦你的包都安装好了,就可以创建一个新的 Jupyter Notebook 文件开始处理数据:
File > New File
,命名为 notebook.ipynb
,并保存在项目目录中。创建笔记本后,确保它使用正确的虚拟环境:
.venv
)。这确保了笔记本使用的是项目虚拟环境中的包和 Python 解释器。现在你已经准备就绪,可以根据需要添加或移除依赖项。你还可以修改 pyproject.toml
文件以添加许可证信息或项目描述。另一个有用的命令是:
uv pip freeze > requirements.txt
这条命令会生成一个 requirements.txt
文件,列出当前活动环境中所有已安装的包及其版本。这个文件可以用来在另一系统上重建环境或用于文档目的。
我个人通常使用 pyproject.toml
文件,但许多人更喜欢使用 requirements.txt
文件。
到目前为止,我对 uv 的体验非常积极。它已经取代了 Poetry 成为了我的工具箱中的一员。虽然回到旧代码时可能会有些头疼和记忆模糊,但我确实经历了更少的设置烦恼,能够更多地专注于工作——这对我是极其宝贵的。
uv
的速度和效率令人印象深刻。我一直在等待不可避免的问题出现,但至今一切顺利。
我将继续实验并分享我的发现。目前,如果你对优化环境管理感兴趣,我建议尝试一下 uv。
一如既往,我欢迎反馈,并有兴趣听听是否有人也试过 uv
。
你是如何管理你的 Python 项目的呢?