uv是一个用Rust编写的快速Python包和项目管理工具。它可以替代pip、pip-tools、pipx、poetry、pyenv和virtualenv等工具。uv为管理Python项目提供了一个完整的生态系统,允许你添加依赖、管理工具、运行脚本等。简而言之,从安装Python到构建Python应用程序,uv使整个过程更快、更简单。uv的最佳特性之一是其与pip工具的兼容性。这意味着你只需在命令前加上“uv”,之前的所有命令都可以直接使用。
在本教程中,我们将学习如何安装uv并探索其各种功能。我们将创建一个项目、添加依赖、运行脚本、使用工具,并了解其pip接口。
安装uv
在Linux和MacOS中,你可以在终端中运行以下命令来安装uv。
$ curl -LsSf https://astral.sh/uv/install.sh | sh
对于Windows,可以尝试使用Winget工具。
$ winget install --id=astral-sh.uv -e
它的灵活性很高,你还可以使用pip接口进行安装。
$ pip install uv
安装完成后,在终端中运行uv
命令以检查是否安装成功。
$ uv
项目
现在我们将初始化一个名为“KDN”的Python项目。
$ uv init KDN
切换到项目目录。
$ cd /datasets/_deepnote_work/KDN
如你所见,项目已经包含了所有必要的文件。
uv:新一代Python包管理器
我们将使用run
命令运行示例Python文件。
$ uv run hello.py
如你所见,它首先创建了虚拟环境文件夹,然后运行了Python文件。
创建虚拟环境于:.venv
Hello from kdn!
接下来,我们将安装并将“pandas”作为依赖添加到项目中。
$ uv add 'pandas==2.2.3'
uv:新一代Python包管理器
脚本
现在,我们将学习如何更轻松地使用uv运行Python文件。首先,我们将创建一个简单的网络脚本Python文件,并添加必要的代码。
$ echo "import requests; from bs4 import BeautifulSoup; response = requests.get('https://www.kdnuggets.com/author/abidali-awan'); soup = BeautifulSoup(response.content, 'html.parser'); print('Webpage Title:', soup.title.string)" > webscrape.py
然后,我们将为网络脚本文件添加依赖。
$ uv add --script webscrape.py "requests" "beautifulsoup4"
这些依赖将以注释的形式添加到文件中,并且只会被uv工具读取。
uv:新一代Python包管理器
当你运行Python文件时,它将首先安装Python包,然后运行代码。
$ uv run webscrape.py
输出:
已安装7个包,耗时18ms
网页标题:Abid Ali Awan - KDnuggets
如果你在项目外工作,并且只有几个Python文件要运行,这将非常有用。
工具
我们可以使用uv
命令安装和使用CLI工具。在我们的例子中,我们将安装huggingface_hub
工具,它允许我们从Hugging Face仓库中拉取和推送文件。
$ uv tool install huggingface_hub
要查看所有已安装的工具,我们可以运行以下命令。
$ uv tool list
我们已经安装了该工具,但如你所见,它有一个不同的名称“huggingface-cli”来运行命令。
huggingface-hub v0.25.1
- huggingface-cli
要使用与包名不同的工具名运行工具,我们将使用--from
标志,并提供包名和工具名。然后,我们将使用API密钥登录Hugging Face Hub。
$ uv tool run --from huggingface-hub huggingface-cli login --token $HUGGINGFACEHUB_API_TOKEN
工具运行成功。
你的令牌已保存到/root/.cache/huggingface/token
登录成功
pip接口
uv与pip工具完全兼容,这意味着我们可以使用uv工具运行所有pip命令。你只需在脚本前加上uv
即可。
我们将使用pip接口安装controlflow
包。
$ uv pip install controlflow -q
然后,我们将使用show
命令查看其描述。
$ uv pip show controlflow
名称:controlflow
版本:0.10.0
位置:/root/venv/lib/python3.9/site-packages
依赖:jinja2, langchain-anthropic, langchain-core, langchain-openai, markdownify, openai, prefect, pydantic-settings, textual, tiktoken, typer
被依赖:
最后,我们将使用freeze命令创建requirements.txt
。
$ uv pip freeze >> requirements.txt
总结
uv适合初学者、个人项目和生产级项目。它越来越受欢迎,许多编排工具正在用uv替代pip,并鼓励用户转向这个更优秀的工具。
在我看来,uv在处理具有数百个依赖的大型项目时比pip更好。然而,对于小型项目,我认为pip工具在速度和效率方面仍然更胜一筹。
在本教程中,我们了解了新的Python项目管理工具。我们还通过代码示例探索了其功能,如项目、脚本、工具和pip接口。