- 开发工具
- CLI
- 包管理器
- 任务调度
【免费下载链接】pixi
Powerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.
pixi clean cache是 pixi(基于 Conda 生态、用 Rust 编写的跨平台包管理器)提供的缓存清理子命令,用于清理 pixi 在其生命周期中写入系统的各类缓存目录。它允许你通过--pypi、--conda、--repodata、--build等旗标按缓存类型精准删除,也可以不指定任何旗标、在确认后一次性清空全部缓存。读完本文,你将掌握该命令的完整参数用法、每种缓存对应的磁盘目录与底层实现,以及如何结合[cache.*]配置与环境变量定制缓存位置。
命令概览:它清理的是什么
pixi 在使用过程中会在系统级缓存目录中保存多种数据:下载并解压的 Conda 包、repodata 索引、uv 的 wheel 缓存、conda↔PyPI 名称映射、pixi exec创建的临时环境、构建工具环境以及源码构建产生的中间产物等。这些缓存帮助 pixi 避免重复下载与重复构建,但随着时间推移会占用大量磁盘空间,或在某些场景下因缓存损坏导致异常。
pixi clean cache就是针对这些系统级缓存(区别于工作区内.pixi/目录中的环境)设计的清理入口。它的官方定位在 crates/pixi_cli/src/clean.rs 的文档注释中写得很清楚:
Clean the cache of your system which are touched by pixi. Specify the cache type to clean with the flags.
与不带子命令的pixi clean(清理工作区.pixi文件夹中的环境信息)不同,pixi clean cache作用于 pixi 的系统缓存根目录,且默认情况下必须用旗标显式指定要清理的缓存类型,避免误删。
用法与完整选项
命令语法为:
pixi clean cache [OPTIONS]全部选项如下(与 关联文档 及 CacheArgs 结构体定义 一一对应):
| 选项 | 说明 | 对应源码字段 |
|---|---|---|
--pypi | 仅清理 PyPI 相关缓存(uv wheel 缓存) | pypi: bool |
--conda | 仅清理 Conda 相关缓存(Conda 包缓存) | conda: bool |
--mapping | 仅清理映射缓存(conda↔PyPI 名称映射) | mapping: bool |
--exec | 仅清理exec缓存(pixi exec缓存环境) | exec: bool |
--repodata | 仅清理 repodata 缓存 | repodata: bool |
--notices | 仅清理已查看的 channel notices 缓存 | notices: bool |
--build-backends | 仅清理构建后端(build backends)环境缓存 | build_backends: bool |
--build | 仅清理构建相关缓存 | build: bool |
--yes (-y) | 对所有询问回答 yes(别名--assume-yes) | assume_yes: bool |
这些旗标彼此独立、可自由组合,例如pixi clean cache --conda --repodata会同时清理 Conda 包缓存与 repodata 缓存。
不带旗标时的交互确认
在 clean_cache 的实现 中,如果所有旗标都未指定,命令不会直接执行,而是弹出确认提示:
No cache types specified using the flags. Do you really want to remove all cache directories from your machine?
只有回答yes(或使用-y/--yes跳过询问)时,才会将整个缓存根目录加入待清理列表;若用户拒绝,则输出 "Nothing to remove." 并直接返回。这一设计避免了误触导致的全量清空。
每个旗标背后:清理的目录与内容
clean_cache函数(crates/pixi_cli/src/clean.rs#L217-L292)根据旗标把对应目录收集到dirs列表后统一删除。各旗标对应的缓存类型定义在 pixi_config 的 CacheKind 枚举 中,其磁盘子目录名则由 pixi_consts 常量 提供:
| 旗标 | 缓存类型(CacheKind) | 磁盘子目录(相对缓存根) | 内容 |
|---|---|---|---|
--conda | CondaPackages | pkgs(CONDA_PACKAGE_CACHE_DIR) | 下载并解压的 Conda 包 |
--repodata | Repodata | repodata(CONDA_REPODATA_CACHE_DIR) | 各 channel 的repodata.json缓存 |
--pypi | PypiWheels | uv-cache(PYPI_CACHE_DIR) | uv 的 wheel 下载缓存 |
--mapping | PypiMapping | conda-pypi-mapping(CONDA_PYPI_MAPPING_CACHE_DIR) | conda 包名 ↔ PyPI 项目名映射 |
--exec | ExecEnvironments | cached-envs-v0(CACHED_ENVS_DIR) | pixi exec复用的临时环境 |
--build-backends | BuildToolEnvironments+ 构建后端目录 | cached-build-tool-envs-v0与backends-v0等 | 构建工具环境与构建后端前缀 |
--notices | 无 CacheKind,单独处理 | notices(CHANNEL_NOTICES_CACHE_DIR) | 已查看的 channel notices |
--build | 构建链路各目录 | git、url、backends-v0、meta-v0等 | Git 检出、URL 下载、构建后端、源码构建产物 |
--notices的特殊处理
与前几个旗标走config.cache_dir_for(CacheKind::...)不同,--notices通过pixi_reporters::channel_notices_cache_dir(&cache_dir)计算路径(clean.rs#L230-L232),对应缓存根下的notices子目录,用于存放各 channel 发布、已被用户查看过的通知记录。
--build-backends覆盖的目录
--build-backends会清理三类位置(clean.rs#L239-L250):
CacheDirs标记的BuildBackendsDir,即缓存根下的backends-v0(定义见 markers.rs);CacheKind::BuildToolEnvironments,即cached-build-tool-envs-v0;- 已废弃的
cached-build-envs-v0(_CACHED_BUILD_ENVS_DIR,源码中以 TODO 注明将在未来版本移除)。
--build覆盖的目录
--build覆盖整个源码构建链路(clean.rs#L251-L271),包含GitDir(Git 检出缓存)、UrlDir(URL 下载缓存)、BuildBackendsDir(backends-v0)、SourceBuildArtifactsDir(内容寻址的源码构建产物缓存)与SourceBuildWorkspacesDir(每个包的后端工作树)、BackendMetadataDir(后端元数据,磁盘名为meta-v0)。这些目录的标记类型同样定义在 crates/pixi_command_dispatcher/src/cache/markers.rs,其中BackendMetadataDir与源码构建产物/工作树均以工作区(.pixi)为基准定位。
实战示例
以下命令均可直接执行:
# 查看某个环境并清理其全部缓存(交互确认,需回答 yes) pixi clean cache # 免确认清空全部缓存(危险操作,请谨慎) pixi clean cache --yes # 只清理 Conda 包缓存(最常占空间的类型之一) pixi clean cache --conda # 同时清理 Conda 包缓存与 repodata 索引缓存 pixi clean cache --conda --repodata # 只清理 uv/PyPI 的 wheel 缓存 pixi clean cache --pypi # 只清理 pixi exec 的缓存环境 pixi clean cache --exec # 只清理 conda↔PyPI 名称映射缓存 pixi clean cache --mapping # 只清理已查看的 channel notices pixi clean cache --notices # 只清理构建后端环境缓存 pixi clean cache --build-backends # 只清理全部构建相关缓存 pixi clean cache --build执行时,每个目录的删除都会显示进度条,完成后汇总输出释放的空间大小(如Removed 1.2 GB),具体由 print_total_removed 配合human_bytes格式化实现。
缓存目录如何定位:解析顺序与配置覆盖
pixi clean cache清理的正是 pixi 实际使用的缓存目录,因此理解缓存路径的解析规则有助于确认清理目标。根据 pixi_configuration 文档(对应 pixi_config 源码),每个缓存类型的目录按以下优先级解析:
- 对应的
PIXI_CACHE_<KIND>_DIR环境变量(最高优先级,如PIXI_CACHE_CONDA_PACKAGES_DIR、PIXI_CACHE_REPODATA_DIR、PIXI_CACHE_PYPI_WHEELS_DIR、PIXI_CACHE_PYPI_MAPPING_DIR、PIXI_CACHE_EXEC_ENVIRONMENTS_DIR、PIXI_CACHE_BUILD_TOOL_ENVIRONMENTS_DIR、PIXI_CACHE_DETACHED_ENVIRONMENTS_DIR); config.toml中对应的[cache.<kind>]路径字段;- 缓存根目录拼接该类型的子目录,缓存根依次取
PIXI_CACHE_DIR、RATTLER_CACHE_DIR、[cache.root]、$XDG_CACHE_HOME/pixi(当存在时)、平台默认路径; - 若解析结果位于网络文件系统且该缓存类型不适合共享,则自动重定向到节点本地目录(受
netfs-redirect策略控制)。
config.toml中的[cache]表(对应 CacheConfig 结构体)支持如下字段:
| TOML 字段 | 缓存内容 | 网络文件系统上的默认行为 |
|---|---|---|
conda-packages | 解压后的 Conda 包(pkgs) | 保持共享 |
repodata | repodata.json缓存 | 保持共享 |
pypi-wheels | uv wheel 缓存(uv-cache) | 保持共享 |
pypi-mapping | conda↔PyPI 名称映射 | 重定向到节点本地 |
exec-environments | pixi exec缓存环境 | 重定向到节点本地 |
build-tool-environments | 构建工具环境缓存 | 重定向到节点本地 |
detached-environments | 分离环境(detached-environments = true时) | 重定向到节点本地 |
root | 缓存根目录覆盖(等价于PIXI_CACHE_DIR) | — |
netfs-redirect | 网络文件系统自动重定向策略(auto/always/never) | — |
相关环境变量(PIXI_CACHE_DIR、RATTLER_CACHE_DIR等)的汇总说明见 环境变量文档。需要指出,pixi clean cache运行时也会读取这些配置:在 execute 函数 中,它会优先通过WorkspaceLocator定位当前工作区,使用工作区的配置(从而尊重工作区内[cache.*]覆盖);若不在任何工作区中,则回退到全局(系统级 + 用户级)配置。
源码级实现原理
清理流程的核心逻辑如下:
- 收集目录:按旗标把目标缓存目录追加到
dirs列表;--build/--build-backends通过CacheDirs::new(...).resolve_from_env::<T>()解析各标记目录(clean.rs#L239-L271)。 - 递归删除并统计大小:remove_dir_recording_size 递归遍历目录,对每个文件/符号链接累加其大小,成功后删除;遇到错误时返回已累计的部分大小与首个 I/O 错误。该函数在
spawn_blocking线程池中执行,避免阻塞异步主流程。 - 进度展示:remove_folder_with_progress 使用 pixi 的全局多进度条(
global_multi_progress)为每个目录显示 spinner,删除完成后输出Removed <path> (<human readable size>);目录本就不存在时输出黄色INFO: Folder ... was already clean.。 - 汇总输出:全部目录处理完毕后,print_total_removed 以人类可读格式打印总释放空间;若为 0 则静默返回。
对于--build清理,源码还贴心地输出提示(clean.rs#L202-L206):如果问题依旧存在,可进一步执行pixi clean cache --build清除全部构建相关的全局缓存。
与pixi clean主命令的分工
pixi clean cache是pixi clean的子命令(见 clean 命令文档)。不带子命令的pixi clean负责清理工作区级内容:默认移除.pixi下的环境目录、solve group 环境、任务缓存、激活缓存以及构建缓存目录,并可通过--environment <ENV>只清理指定环境、--activation-cache只清理激活缓存、--workspaces-registry修剪失去关联的工作区注册表(clean.rs#L174-L211)。二者配合使用时,pixi clean解决"工作区变脏",pixi clean cache解决"系统缓存膨胀",互不替代。
使用建议与注意事项
- 优先按类型清理:建议用
--conda、--repodata、--pypi等旗标精准清理,避免不指定旗标时的全量删除,因为全量清理会丢掉pixi exec缓存环境与构建缓存,下次使用时需重新下载/构建。 - 确认缓存根位置:若设置了
PIXI_CACHE_DIR或[cache.root],清理目标会指向自定义位置;HPC/CI 场景中网络文件系统上的缓存可能被自动重定向到节点本地临时目录,清理前可先确认实际路径。 - 与配置联动:若希望长期将某类缓存移出主磁盘(如映射缓存、exec 缓存),可配合
[cache.*]配置或对应的PIXI_CACHE_*_DIR环境变量实现,而不是反复清理。 - 清理后效果:Conda 包缓存与 uv wheel 缓存被清空后,后续安装将重新下载对应包;repodata 缓存清空后首次求解需重新拉取 channel 索引。
延伸阅读:缓存配置的完整字段与解析顺序见 pixi_configuration.md,pixi clean主命令的选项说明见 clean/index.md,缓存目录常量定义见 crates/pixi_consts/src/consts.rs,命令分发器缓存标记见 crates/pixi_command_dispatcher/src/cache/markers.rs。
- 开发工具
- CLI
- 包管理器
- 任务调度
【免费下载链接】pixi
Powerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.
相关推荐
Detox clean-framework-cache 命令详解:清理 iOS 框架缓存与 XCUITest 运行器
Detox clean framework cache 命令详解:清理 iOS 框架缓存与 XCUITest 运行器 本指南围绕 Detox CLI 的 cle
测试移动开发质量保障开发工具Cilium FQDN 缓存清理实战:cilium-dbg fqdn cache clean 命令完全指南
Cilium FQDN 缓存清理实战:cilium dbg fqdn cache clean 命令完全指南 cilium dbg fqdn cache clea
云原生网络服务网格可观测性网络安全eBPFnpm cache 命令完全指南:add / clean / ls / verify 与 npx 缓存管理
npm cache 命令完全指南:add / clean / ls / verify 与 npx 缓存管理 npm cache 是 npm CLI 中用于操作本
开发工具包管理器CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考