使用 uv 进行 python 项目管理

文章目录

  • [Why UV?](#Why UV?)
  • [安装 Installation](#安装 Installation)
  • [UV 项目开发](#UV 项目开发)
  • [UV 项目构建和发布](#UV 项目构建和发布)

Why UV?

  • 通过 pyproject.toml he uv.lock 文件进行项目依赖管理,同时允许开发者在项目中进行不同 python 环境的管理和切换,单一命令实现完整的项目管理,无需 pipvenv 等其他工具。
  • pip 10 倍以上更加便利快捷的依赖包管理

安装 Installation

Linux 和 MacOS 上的安装命令:

sh 复制代码
 curl -LsSf https://astral.sh/uv/install.sh | sh

windows 安装命令:

powershell 复制代码
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

其中, -ExecutionPolicy ByPass 用于临时修改 Windows 的安全策略限制,允许在 PowerShell 中执行 psl 脚本。

安装完成之后,默认情况下终端并不了解 uv 的命令补全规则,需要额外让终端在启动时加载 uv 的补全规则:

shell 复制代码
echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc

Windows:

powershell 复制代码
if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}
Add-Content -Path $PROFILE -Value '(& uv generate-shell-completion powershell) | Out-String | Invoke-Expression'

安装完成之后,可以直接运行 uv 命令,查看 help 内容。

UV 项目开发

项目结构

项目是 uv 的核心概念,通过 uv init [your-project-name] 可以初始化创建一个项目,初始化的目录结构如下:

复制代码
.
├── .python-version
├── README.md
├── main.py
└── pyproject.toml

例如 uv init hello-world

其中,main.py 文件为主入口文件,包含简单的示例代码:

py 复制代码
def main():
    print("Hello from hello-world!")


if __name__ == "__main__":
    main()

uv 通过一个 pyproject.toml 文件来描述这个 uv 项目,这是 uv 项目的核心文件,包含了这个项目的所有元数据比如项目名称、依赖等内容:

复制代码
[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []

通过执行 uv run main.py 可以执行 python 脚本:

执行之后,项目下会额外生成一个 uv.lock 锁文件以及 .venv/ 目录:

其中:

  • uv.lock 是 uv 项目依赖的 python 包的版本信息锁文件,
  • .venv/ 是管理项目的 python 虚拟环境的文件夹,与系统的其他 python 环境相互隔离,uv 可以允许用户在一个项目中进行不同 python 环境的切换。初始化项目之后,默认的 python 环境是 uv 安装时携带的 python 环境,可以通过 uv python 命令查看当前项目的 python 环境,进行其他版本的 python 环境安装,切换环境等管理操作

初始化完成之后,后续就可以根据具体项目需求,使用 flask 等后台代码框架进行应用代码的初始化和开发了。

依赖包管理

uv 安装依赖包的方式如下

shell 复制代码
uv add [package]
uv pip install flask

可以使用与 pip 一样的方式使用 ==, >=, <=指定版本,或者版本条件安装进行安装:

shell 复制代码
uv pip install 'ruff>=0.2.0'

一些依赖包设置了额外的依赖选项,需要通过 package[option] 的方式指定依赖项安装:

shell 复制代码
uv pip install "flask[dotenv]"

Python 环境管理

uv 项目中,一般通过 uv venv 创建虚拟环境(类似 conda):

shell 复制代码
uv venv --python 3.12

使用 uv python 命令进行 python 环境管理:

shell 复制代码
# 常用,安装指定版本
uv python install [version]
uv python install 3.12

# 根据项目要求安装满足条件的版本
uv python install '>=3.8,<3.10'

# 安装多版本
uv python install 3.9 3.10 3.11

UV 项目构建和发布

相关推荐
Buke..2 分钟前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法
JacksonMx4 分钟前
Java CompletableFuture 异步编程实战:从入门到架构师避坑指南
linux·数据库·python
longxiaozhang630 分钟前
C#运算符重载:让对象也能使用“加减乘除”
开发语言·c#
W_3260036 分钟前
Python-OpenCV HSV颜色空间与inRange颜色分割:按颜色提取目标物体
图像处理·人工智能·python·opencv·机器学习
mounter6251 小时前
GCCRS 突破与 Rust 入核:Linux 工具链的重大变革
linux·开发语言·rust·linux kernel·kernel
Buke..1 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(上):Frida 反调试绕过与 unidbg 调用
java·开发语言·爬虫·python·安卓
abcefg_h1 小时前
MCP 实战指南:如何在项目中使用 Model Context Protocol 及其通信原理
开发语言·后端·golang·mcp
头发够用的程序员2 小时前
ImportError: libopenblas.so.0: cannot open shared object file 完整复盘与解决方案
python·ubuntu
梦痕长情2 小时前
记一次关于AI在数仓中的应用
开发语言·人工智能·python·ai