三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

现代化Python工具:uv、Ruff、Pyright、Rich(只讲重点版)

现代化Python工具:uv、Ruff、Pyright、Rich(只讲重点版)

课程视频:【Python/uv】迈向AI的第零步!现代化Python工具指南_哔哩哔哩_bilibili

github仓库:GitHub - Wood-Q/ModernPython: 现代化python入门教程 · GitHub

notion笔记:https://mirage-thought-d06.notion.site/Python现代化工具


基础:ide(代码编辑器)

VSCode

  • 官网:https://code.visualstudio.com/

底层:uv(快速Python包管理器)

解决Python的依赖管理,且能以极快的速度安装包(pip的高性能替代)

官方文档:uv

  • 安装(Windows系统),在 PowerShell 里输入:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

  • 把 C:\Users\11842\.local\bin 编辑到环境变量

  • 放进环境变量之后,每次打开一个PowerShell,它就会自动把 uv 加载进来

uv常用命令

uv venv # 创建虚拟环境 (它会默认创建在 .venv 目录) .venv\Scripts\activate # 激活虚拟环境(如果是 linux系统,则为 .venv/bin/activate)

uv venv my-env -p 3.11 # 指定环境名字和python版本 uv venv -p python@3.11 # 使用 python3.11 创建 .venv # 仍需激活环境 uv init # 初始化一个uv项目,会自动生成 main.py、pyproject.toml、README.md uv pip install xxx # 装包(放到全局缓存里),速度比pip快很多 uv add xxx # 把安装包从全局缓存拉到具体项目里

uv add 之后,pyproject.toml 文件的 dependencies 列表里会自动加上对应的包和版本

uv sync # 如果有拉取一个uv的项目(git clone xxx.git),直接sync即可配置好环境 uv pip freeze > requirements.txt # 生成一个包含所有已安装包及其精确版本的列表,格式与 pip freeze 的输出相同,常用于生成 requirements.txt 文件 uv pip install -r requirements.txt # 按照 requirements.txt 文件中列出的所有依赖包及其版本要求,批量安装 Python 库

pyproject.toml(配置文件)

安装下面这个插件,toml 文件就会语法高亮了

pyproject.toml 是一个统一的 Python 项目配置文件(静态的、声明性)

文件结构:

  • [build-system]:想让别人可以通过 pip install xxx 来下载我的包,才需要填这个,告诉 pip 如何构建这个包
  • [project]:这个表几乎涵盖了所有需要声明的项目信息
[project] name = "my-package" # 项目名,发布到PyPI时使用 version = "0.1.0" # 项目版本 description = "A short description of my project." # 项目简短描述 readme = "README.md" # 指定README文件 requires-python = ">=3.9" # 要求的Python版本 # --- 核心依赖,即 install_requires --- dependencies = [ "httpx", "rich>=13.0.0", 'tomli; python_version < "3.11"', # 可以包含环境标记 ]
  • [tool.*]:统一配置所有开发工具。每个工具都可以定义自己的配置表,以 [tool.工具名] 的形式存在

# --- ruff (linter/formatter) 的配置 --- [tool.ruff] line-length = 88 # 设置行长限制 target-version = "py311" # 设定目标Python版本以应用相应规则 [tool.ruff.lint] # 选择要启用的规则集,E=pycodestyle错误, F=pyflakes, I=isort select = ["E", "F", "I"] # 忽略特定的规则 ignore = ["E501"]

和 conda 的区别


语法:Ruff(快速Python语法检查器)

作用:配置编写 Python 项目所需要遵循的语法规则

  • 安装插件(可进行语法提示):

  • 安装:
uv tool install ruff

作用

限制一行的长度、自动移除没有使用但导入的包或变量、自动排序 import 语句,等等

常用操作

任务命令
格式化我的代码ruff format .
检查代码问题并自动修复ruff check . --fix
在 CI/CD 中验证格式ruff format . --check
在 CI/CD 中检查代码质量ruff check .
开发时实时检查ruff check . --watch
搞不清某条规则是什么意思ruff rule <RULE_CODE>
清理缓存ruff cache clean
终极清理ruff format . && ruff check . --fix

进阶配置

在 pyproject.toml 里配置:

  • 启用预览功能:Ruff 的许多强大功能(如类型感知 lint、更智能的自动修复)目前处于 preview 模式,需显式启用
[tool.ruff] preview = true

或命令行启用:

ruff check --preview . ruff format --preview .
  • 细粒度规则控制(Per-File / Per-Line )
# 忽略特定文件/目录 [tool.ruff.lint] extend-exclude = [ "migrations/", "legacy_code.py", "scripts/temp_*.py" ] # 为特定文件启用/禁用规则 [[tool.ruff.lint.per-file-ignores]] "tests/**.py" = ["S101", "D"] # 忽略 asserts 和 docstring 规则 "scripts/*.py" = ["T20"] # 忽略 print 警告

pyproject.toml 配置

lint.select 是规则集

  • E501是行长的规则,如 line-length=10(行长不能超过10)
  • exclude 表示以上规则忽略特定文件
  • format 里 single 单引号,double 双引号

最佳实践

  1. 统一使用pyproject.toml进行配置
    将 Ruff 的所有配置集中在pyproject.toml[tool.ruff]表中

  2. 明确目标 Python 版本 (target-version)

    [tool.ruff] target-version = "py311" # 明确项目使用的 Python 版本
  3. 从一个稳健的基础规则集开始
    不要一开始就想着启用所有规则。一个理智的起点是启用那些被广泛接受、能显著提升代码质量的核心规则集

    [tool.ruff] # E: pycodestyle 错误, F: Pyflakes 逻辑错误, I: isort 导入排序, UP: pyupgrade 语法升级 select = ["E", "F", "I", "UP"]
  4. 拥抱自动修复
    ruff check . --fix作为常规操作。Ruff 的自动修复非常安全可靠,能处理掉大量琐碎的格式和代码问题


类型:Pyright(静态类型检查器)

集成在 VSCode 的 Pylance 插件里:

在设置里搜 Type Checking Mode,可以配置 Basic、Standard、Strict 三档(一般用 Basic 即可):


守门:pre-commit(git相关)

视频里没介绍,就略了,具体看 notion 笔记吧


美化:Rich(Python美化堆栈报错)

安装:

uv pip install rich

如何美化堆栈报错?在文件最前面写上:

from rich.traceback import install install()
← 返回列表