使用 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 项目构建和发布

相关推荐
优橙教育9 分钟前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
想会飞的蒲公英1 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel2 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记2 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
碎光拾影2 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
CCPC不拿奖不改名2 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code3 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook3 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
Miao121313 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
CRMEB系统商城4 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源