news 2026/9/12 15:04:28

Ruff 安装完全指南:从 uvx 零安装、pip/uv 包管理到 Docker 容器化的全平台部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ruff 安装完全指南:从 uvx 零安装、pip/uv 包管理到 Docker 容器化的全平台部署

Ruff 安装完全指南:从 uvx 零安装、pip/uv 包管理到 Docker 容器化的全平台部署

【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff

Ruff 是一个用 Rust 编写的极速 Python 代码检查器(linter)与格式化器(formatter),它同时支持 lint(ruff check)与格式检查(ruff format)两条核心命令线。本指南以官方 docs/installation.md 为主线,系统梳理 Ruff 在 PyPI、uv/pip/pipx、独立安装脚本、Homebrew、Conda、Docker 等各发行渠道的安装方式与适用场景,并结合本仓库源码说明 Python 包封装、容器镜像结构等底层机制,帮助你根据团队与运行环境选择最合适的部署方案。

一、发行形态与版本概览

Ruff 是一个单一静态二进制程序,其核心 CLI 位于 crates/ruff,对应的Cargo.toml声明当前版本为0.16.6,并指定default-run = "ruff"(见 crates/ruff/Cargo.toml)。正因为编译产物只是一个可执行文件,Ruff 才能以极低的运行时依赖被分发到几乎每一种包管理器与容器环境中。

从本仓库的工作区配置(Cargo.toml)可以看到,Ruff 的源码按功能拆分为 40 余个 crate,例如负责 lint 规则的ruff_linter、负责格式化引擎的ruff_python_formatter、负责语义分析的ruff_python_semantic等;用户最终拿到的是 crates/ruff/src/main.rs 中main()所驱动的统一 CLI 入口。这种「内部模块化、外部单二进制」的架构,正是官方文档中「一个二进制,全平台可用」这一安装哲学的实现基础。

二、通过 PyPI 安装:uv / pip / pipx / uvx

Ruff 以ruff为包名发布在 PyPI 上,因此任何 Python 生态的包管理器都可以安装它。官方文档给出了四种方式,覆盖「全局安装」「项目内安装」与「零安装直接调用」三种使用场景。

1. uvx:无需安装的直接调用(推荐体验方式)

uvx是 uv 自带的「在隔离环境中运行工具」命令,它会在需要时自动获取对应版本的 Ruff,而不修改你当前的环境。官方文档示例:

uvx ruff@0.16.6 check # Lint all files in the current directory. uvx ruff@0.16.6 format # Format all files in the current directory.

这里ruff@0.16.6显式锁定了与当前仓库一致的版本号(参见 crates/ruff/Cargo.toml 中version = "0.16.6")。如果不带版本号(uvx ruff),则会解析为最新可用版本。uvx适合 CI 流水线或临时脚本中「即用即走」的场景,不污染任何环境。

2. uv tool install:全局安装(官方推荐)

$ # Install Ruff globally. $ uv tool install ruff@latest

uv tool install会将 Ruff 安装为一个独立的全局工具,二进制会放入 uv 管理的工具目录,并在 PATH 中提供ruff命令。这是官方文档标注为recommended的全局安装方式,后续uv tool upgrade ruff即可平滑升级。

3. uv add --dev:作为项目开发依赖

$ # Or add Ruff to your project. $ uv add --dev ruff

该命令会把ruff写入项目的pyproject.toml开发依赖([dependency-groups]或 dev 依赖区),之后通过uv run ruff check调用,确保团队所有成员使用锁定的同一版本。这与 Ruff 自身在 pyproject.toml 中管理自身依赖的方式一致,适合「lint/format 结果可复现」的团队协作诉求。

4. pip 与 pipx:经典 Python 安装方式

$ # With pip. $ pip install ruff $ # With pipx. $ pipx install ruff

pip install ruff会把ruff可执行文件放入当前 Python 环境的bin(Unix)或Scripts(Windows)目录。pipx则把 Ruff 隔离安装在独立虚拟环境中,避免与项目依赖互相污染,适合「全局工具」定位。

Python 包是如何转发到二进制程序的?

从源码看,PyPI 上的ruff并不仅仅是二进制分发:仓库中的 python/ruff/init.py 与 python/ruff/_find_ruff.py 实现了一个二进制定位器。find_ruff_bin()会按顺序在以下位置查找名为ruff(Windows 上带.exe后缀)的可执行文件:

  • 当前 Python 的 scripts 目录(sysconfig.get_path("scripts"));
  • base prefix 对应的 scripts 目录;
  • 包目录向上匹配Lib/site-packages/ruff(Windows)或lib/python*/site-packages/ruff(Unix)后拼接出的Scripts/bin目录;
  • 与包目录相邻的bin目录(对应pip install --target场景);
  • 用户 scheme 的 scripts 目录(如~/.local/bin)。

若都找不到,会抛出RuffNotFound并列出全部已探测路径(见 python/ruff/_find_ruff.py)。而 python/ruff/main.py 使得python -m ruff同样可用:Unix 下通过os.execvp直接替换为 ruff 进程,Windows 下则用subprocess.run透传参数并透出退出码。因此无论你是ruff checkuvx ruff check还是python -m ruff check,最终都进入同一个 Rust CLI 入口 crates/ruff/src/main.rs。

三、独立安装脚本:一条命令装好(自 0.5.0 起)

0.5.0版本开始,Ruff 官方提供独立安装脚本,无需任何 Python 环境或包管理器,适合服务器、Docker 基础镜像或 CI runner 上的快速部署:

$ # On macOS and Linux. $ curl -LsSf https://astral.sh/ruff/install.sh | sh $ # On Windows. $ powershell -c "irm https://astral.sh/ruff/install.ps1 | iex" $ # For a specific version. $ curl -LsSf https://astral.sh/ruff/0.5.0/install.sh | sh $ powershell -c "irm https://astral.sh/ruff/0.5.0/install.ps1 | iex"

安装脚本会检测平台架构,从官方发布渠道下载对应版本的预编译二进制并放入用户级 bin 目录。指定版本时把 URL 中的版本段替换为目标版本即可,例如https://astral.sh/ruff/0.16.6/install.sh

四、系统包管理器安装:融入既有运维体系

对于已经用系统包管理器管理开发工具链的环境,Ruff 官方文档列出了多条官方维护的渠道,可按发行版直接选用。

Homebrew / Linuxbrew(macOS、Linux)

$ brew install ruff

Ruff 已收录于 Homebrew 官方 formula,macOS 与 Linuxbrew 用户均可使用。

Conda(conda-forge)

$ conda install -c conda-forge ruff

Ruff 在conda-forge渠道发布,适合以 Conda 作为主包管理器的数据科学环境。

pkgx

$ pkgx install ruff

pkgx 是一个无需 root 的工具运行时,pkgx install ruff会将其安装到 pkgx 管理的工具目录中。

Arch Linux(官方仓库)

$ pacman -S ruff

Ruff 位于 Arch 官方 extra 仓库,直接pacman -S ruff即可。

Alpine Linux(社区仓库)

$ apk add ruff

Alpine 社区仓库提供了ruff包,注意 Alpine 默认使用 musl libc,官方预编译二进制本身也包含 musl 目标(见下文 Docker 一节对x86_64-unknown-linux-musl的说明),因此兼容性良好。

openSUSE Tumbleweed

$ sudo zypper install python3-ruff

openSUSE Tumbleweed 发行仓库中的软件包名为python3-ruff,需要sudo执行zypper install

提示:通过系统包管理器安装的版本可能滞后于 PyPI 上的最新版本。若对版本敏感,建议优先使用 uv/pipx 或独立安装脚本。

五、Docker 容器化部署

Ruff 官方在 GHCR 上发布容器镜像ghcr.io/astral-sh/ruff,每个发布版本打一个 tag,另有一个latesttag 跟随最新版本:

$ docker run -v .:/io --rm ghcr.io/astral-sh/ruff check $ docker run -v .:/io --rm ghcr.io/astral-sh/ruff:0.3.0 check $ # Or, for Podman on SELinux. $ docker run -v .:/io:Z --rm ghcr.io/astral-sh/ruff check

三条命令的含义:

  • -v .:/io:把当前目录挂载到容器内的/io
  • --rm:容器退出后自动删除;
  • check:在容器内对/io(即宿主机当前目录)执行 lint;:0.3.0指定历史版本 tag;
  • :Z:在 SELinux 启用的 Podman 主机上,为挂载卷打上正确的 SELinux 标签,否则容器可能没有读取卷的权限。

镜像结构可以从仓库根目录的 Dockerfile 中得到印证:该文件使用多阶段构建,先在ubuntu构建阶段通过cargo zigbuild*-unknown-linux-musl目标交叉编译出ruff二进制(arm64 对应aarch64-unknown-linux-musl,amd64 对应x86_64-unknown-linux-musl),最终阶段基于scratch——即不含任何操作系统组件与 shell 的空白镜像,只拷贝ruff可执行文件,并将工作目录设为/ioENTRYPOINT指向/ruff。这正是docker run ... ghcr.io/astral-sh/ruff checkcheck会成为 ruff 第一个参数的机制来源。

由于镜像基于scratch,它只适合作为命令行工具运行,无法在容器内执行 shell 命令;如需调试或封装脚本,可以docker run时自行覆盖入口,或在自定义镜像中COPY --from=ghcr.io/astral-sh/ruff /ruff /usr/local/bin/ruff复用该二进制。

六、安装后的验证与常用命令

无论通过哪种渠道安装,安装完成后都可以在命令行直接使用:

$ ruff check # Lint all files in the current directory. $ ruff format # Format all files in the current directory.
  • ruff check:对当前目录(递归)执行 lint,输出规则代码与建议;若项目存在pyproject.tomlruff.toml,会自动读取其中的 Ruff 配置段。
  • ruff format:对当前目录的 Python 文件执行格式化,输出「已重写/未改动」的统计。

建议安装后用ruff --version确认版本号。版本信息的格式化逻辑在 crates/ruff/src/version.rs:日常发行版直接显示CARGO_PKG_VERSION(如0.16.6);若从 git 检出构建且存在提交信息,则会显示形如0.16.6+3 (abc1234 2026-09-01)的格式,其中+3表示距离最近 tag 的提交数。

此外,Ruff 的 CLI 支持多种全局选项,例如--config(可指向 TOML 配置文件,也可直接传line-length = 100这样的键值覆盖)、--isolated(忽略所有配置文件)等,这些选项在 crates/ruff/src/args.rs 中定义并由 clap 解析。若需为编辑器或脚本生成 shell 补全,可查看ruff generate-shell-completion(对应 crates/ruff/src/commands/completions)。

七、从源码构建(进阶)

Ruff 是一个 Cargo workspace(Cargo.toml),要求 Rust 工具链版本不低于1.96(见工作区rust-version声明)。从源码构建 ruff 二进制的方式:

$ cargo build --release --bin ruff

构建产物位于target/release/ruff。仓库还提供了面向性能调优的构建脚本 scripts/build_ruff_pgo.py,它使用「钉住的生态项目」对 Ruff 做 Profile-Guided Optimization(PGO)构建,适合对 lint 性能有极致要求的自建发行场景。

对 WebAssembly 有需求的读者可以关注 crates/ruff_wasm,它以 wasm-bindgen 导出 lint 与 format 核心能力(见 crates/ruff_wasm/src/lib.rs),是官方 Playground 的底层依赖;不过这属于集成级能力,常规安装无需涉及。

八、安装方式速查与选型建议

场景命令备注
临时体验 / CI 即用即走uvx ruff@0.16.6 check不落盘安装,隔离执行
全局安装(推荐)uv tool install ruff@latestuv 托管,便于升级
项目开发依赖uv add --dev ruff版本随项目锁定
经典 Python 环境pip install ruff装进当前 Python 环境
隔离全局工具pipx install ruff独立虚拟环境
免依赖快速安装curl -LsSf https://astral.sh/ruff/install.sh \| shmacOS/Linux;Windows 用 PowerShell 脚本
macOS/Linuxbrew install ruffHomebrew/Linuxbrew
Conda 生态conda install -c conda-forge ruffconda-forge 渠道
pkgxpkgx install ruff免 root 工具运行时
Arch Linuxpacman -S ruff官方 extra 仓库
Alpineapk add ruff社区仓库,musl 兼容
openSUSE Tumbleweedsudo zypper install python3-ruff发行仓库,需 sudo
容器化docker run -v .:/io --rm ghcr.io/astral-sh/ruff check基于 scratch 的静态镜像

选型建议:个人开发机优先uv tool installpipx;项目团队用uv add --dev锁定版本;CI 与服务器用独立安装脚本或 Docker 镜像;以系统包管理器为统一标准的团队则直接用对应发行版渠道。无论哪种方式,Ruff 都保持「单一二进制 + 一致 CLI」的形态,切换安装渠道不会带来行为差异。

【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 15:02:44

3C零件厚度测量选型实战:MLD25激光位移传感器适配解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 15:01:58

Rockchip VPU DMA-BUF内存泄漏导致黑屏故障排查与修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 15:00:25

三自由度机械臂自适应神经网络控制实战

1. 三自由度机械臂控制的核心挑战三自由度机械臂作为工业自动化领域的经典研究对象,其控制问题看似简单却暗藏玄机。我在实际项目中遇到过这样一个案例:当机械臂需要完成高速拾放作业时,传统PID控制器在空载状态下表现良好,但一旦…

作者头像 李华
网站建设 2026/9/12 14:58:51

Unity大规模角色动画优化:Mesh Animation Baker与GPU Instancing

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华