资讯动态

pixi 全局清单(Global Manifest)完全指南:pixi-global.toml 的结构、位置与全部配置项

发布时间:2026/9/27 10:56:09 来源:尧图企业网站定制
开发工具CLI包管理器任务调度【免费下载链接】pixiPowerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.项目地址https://gitcode.com/gh_mirrors/pi/pixi点击查看免费下载pixi global在系统层面管理全局安装的工具每个工具被隔离在独立环境中只有被暴露exposed的可执行文件进入系统PATH。而这一切的控制中心就是全局清单文件pixi-global.toml——它记录了所有全局环境、依赖、暴露的可执行文件与快捷方式可以手工编辑、同步、纳入版本控制并与他人共享。读完本文你将完整掌握该清单的 TOML 结构、不同操作系统下的查找优先级、channels、exclude-newer安全截断、源码依赖、平台与虚拟包、暴露映射以及快捷方式的全部配置细节并了解其在 pixi 源码中的解析与落盘实现。一份典型的全局清单长什么样运行pixi global install系列命令后生成的清单大致如下该示例来自 docs/global_tools/manifest.mdversion 1 [envs.rattler-build] channels [conda-forge] dependencies { rattler-build * } exposed { rattler-build rattler-build } [envs.ipython] channels [conda-forge] dependencies { ipython *, numpy *, matplotlib * } exposed { ipython ipython, ipython3 ipython3 } [envs.python] channels [conda-forge] dependencies { python 3.12.* } # (1)! exposed { py3 python } # (2)!dependencies是要安装进该环境的包可以指定版本约束或使用通配符如3.12.*、3.12、*。exposed定义哪些可执行文件会进入系统PATH。这里把python以py3的名字暴露出来于是你在任意目录运行py3就能启动这个 Python 3.12 解释器。从源码看这个文件结构被严格定义在 crates/pixi_global/src/project/parsed_manifest.rs 中顶层由version、可选的[global]表、可选的[exclude-newer]包级覆盖表以及envs环境字典组成每个环境则包含channels、可选的platform、dependencies、exposed与可选的shortcuts字段。当前支持的清单版本号为1GLOBAL_MANIFEST_VERSION版本过低会提示please update the manifest版本过高则会提示please updatepixi。Manifest 位置与优先级清单默认名为pixi-global.toml常量GLOBAL_MANIFEST_DEFAULT_NAME见 crates/pixi_consts/src/consts.rs存放在 pixi 配置目录的manifests子目录中。不同操作系统下的候选位置及优先级如下 Linux| **优先级** | **位置** | **说明** | |------------|------------------------------------------------|--------------------------------------------| | 4 | $PIXI_HOME/manifests/pixi-global.toml | PIXI_HOME 中的全局清单。 | | 3 | $HOME/.pixi/manifests/pixi-global.toml | 用户主目录中的全局清单。 | | 2 | $XDG_CONFIG_HOME/pixi/manifests/pixi-global.toml | XDG 规范配置目录。 | | 1 | $HOME/.config/pixi/manifests/pixi-global.toml| 配置目录。 | macOS| **优先级** | **位置** | **说明** | |------------|------------------------------------------------|--------------------------------------------| | 3 | $PIXI_HOME/manifests/pixi-global.toml | PIXI_HOME 中的全局清单。 | | 2 | $HOME/.pixi/manifests/pixi-global.toml | 用户主目录中的全局清单。 | | 1 | $HOME/Library/Application Support/pixi/manifests/pixi-global.toml | 配置目录。 | Windows| **优先级** | **位置** | **说明** | |------------|------------------------------------------------|--------------------------------------------| | 3 | $PIXI_HOME\manifests/pixi-global.toml | PIXI_HOME 中的全局清单。 | | 2 | %USERPROFILE%\.pixi\manifests\pixi-global.toml | 用户主目录中的全局清单。 | | 1 | %APPDATA%\pixi\manifests\pixi-global.toml | 配置目录。 |!!! note 如果多个位置都存在清单文件将使用优先级最高的那一个。该查找逻辑在 crates/pixi_global/src/project/mod.rs 的manifest_dir()中实现候选目录依次为pixi_home()与系统配置目录下拼接manifests子目录MANIFESTS_DIR常量若某个候选位置已经存在pixi-global.toml文件则直接采用否则回退到第一个候选目录。要查看你机器上当前实际使用的清单路径运行pixi info即可参见 pixi info 命令文档。Channels下载源与优先级channels键描述了解析环境依赖时使用的 Conda 频道channel且存在优先级排在最前面的频道优先级最高如果该频道中找不到某个包则依次尝试下一个频道。例如运行pixi global install --channel conda-forge --channel bioconda snakemake会在清单中生成如下条目[envs.snakemake] channels [conda-forge, bioconda] dependencies { snakemake * } exposed { snakemake snakemake }频道的更多细节可参考 频道逻辑。在源码层频道不仅可以是字符串也可以是带priority与exclude-newer的内联表如{ channel nvidia, priority 1 }manifest.rs中的channel_array_element_name辅助函数同时识别这两种写法ParsedEnvironment::prioritized_channels()则按优先级从高到低排序频道。Exclude newer安装新鲜包的安全截断[global]表中的exclude-newer键会把某个截止时间之后上传的包从清单中所有环境的求解solve中排除。这降低了误装近期发布、可能已被攻陷的包的风险。它接受与 工作区清单 相同的取值一个 RFC 3339 时间戳、一个YYYY-MM-DD日期或一个相对求解时刻的时长duration。日期被解释为 UTC 次日零点开始因此2026-03-30实际表示2026-03-31T00:00:00Z。频道可以在其自身配置中覆盖该截止时间而[exclude-newer]表可以为个别包提供更细粒度的覆盖version 1 [global] exclude-newer 7d [exclude-newer] my-tool 0d [envs.tools] channels [ { channel https://my.internal/channel, exclude-newer 0d }, conda-forge, ] dependencies { my-tool * } exposed { my-tool my-tool }覆盖关系的优先级是包级覆盖 频道级覆盖 [global]截止时间。包级覆盖作用于包含该包的每一个环境两个表也可以独立工作——如果[global]中没有截止时间那么只有被包级或频道级覆盖点名的那些包/频道才会被排除。需要留意几点全局环境没有 PyPI 依赖因此不存在工作区中[pypi-exclude-newer]表对应的等价物。如果某个环境包含比截止时间更新的包该环境会被视为不同步out of sync收紧截止时间后下一次pixi global sync会重新求解该环境。源码中的解析逻辑位于 parsed_manifest.rsParsedGlobal持有可选的exclude_newer顶层exclude-newer必须是包名到截止时间的表若写成标量会得到明确报错测试test_exclude_newer_scalar_at_top_level与快照验证了这一行为test_exclude_newer则验证了2025-01-01会被解析为2025-01-02 00:00:00 UTC与文档中日期取次日 UTC 零点的语义一致。Dependencies往环境里加包dependencies是要安装进环境中的 Conda 包。例如pixi global install python3.12会在清单中生成如下条目原文档示例环境名为vim实际环境名由你的安装目标决定[envs.vim] channels [conda-forge] dependencies { python 3.12 } # ...通常你只需要指定要安装的那个工具但也可以按需添加更多包。通过指定安装目标环境可以一次性添加多个依赖。例如pixi global install --environment my-env git vim python会生成[envs.my-env] channels [conda-forge] dependencies { git *, vim *, python * } # ...向已存在的环境追加依赖使用pixi global addpixi global add --environment my-env package-a package-b新包会作为依赖加入my-env环境但不会自动暴露这些新包的可执行文件。移除依赖则使用pixi global removepixi global remove --environment my-env package-a package-b底层实现上crates/pixi_global/src/project/manifest.rs 的add_dependency/remove_dependency会同时更新内存中的解析结果self.parsed与可编辑的 TOML 文档self.document。值得注意的是添加依赖时会按 Conda 包名归一化规则查找已有键——即使文档中写成PyTest这样的非归一化拼写也会原地覆盖而不是重复插入remove_dependency同样借助existing_package_key找到真实键后再删除。Source dependencies直接从源码安装工具除了从频道安装 Conda 包你还可以安装从源码构建的工具。把pixi global install指向一个 git 仓库或本地路径即可pixi global install --git https://github.com/prefix-dev/rattler-build rattler-build pixi global install --path ./my-tool如果源码自带 pixi package manifest那么以上命令就足够了如果没有则需用--build-backend告诉 pixi 如何构建pixi global install --git https://github.com/BurntSushi/xsv.git --build-backend pixi-build-rust这会在依赖的package键下记录一个内联包定义inline package definition[envs.xsv] channels [conda-forge] [envs.xsv.dependencies] xsv { git https://github.com/BurntSushi/xsv.git, package.build.backend.name pixi-build-rust }当 pixi 能从源码推断出包名时可以省略包名因此上面的命令无需显式命名就安装了xsv环境。如果一份源码产出多个不同命名的包则显式列出你想要的pixi global install --path ./workspace foo bar当--build-backend或--package与多个具名包组合使用时同一份内联定义会分别记录到每个包上。--build-backend的值支持可选的版本约束例如--build-backend pixi-build-rust0.3,0.4。package定义中的任何其他字段都可以通过--package DOTTED_KEYTOML_VALUE设置它直接映射到package下的键值必须是合法 TOML所以字符串需要带引号pixi global install --git https://github.com/some/tool \ --build-backend pixi-build-python \ --package host-dependencies.hatchling*在 pixi package manifest详见 全局工具介绍 中Install Dependencies From Source一节中可表达的任何内容这里都允许CLI 参数只是手工编辑定义的快捷方式等价于用pixi global edit直接修改。!!! note 源码依赖是在你机器上构建的因此包含源码依赖的环境只能面向当前平台。为这类环境设置不同的platform会报错。pixi global sync会在源码依赖的**规格specification**发生变化时例如 git 修订版本被编辑、package表被修改重新构建它而要拾取未固定 git 依赖的新提交或本地路径的新内容需要运行pixi global update。从源码实现看内联包定义在 parsed_manifest.rs 中被转换成InlinePackageManifest转换过程需要清单根目录作为解析上下文因此add_dependency遇到内联定义时会先在副本上应用编辑、重新解析成功后再提交文档与解析结果保证两者始终一致测试test_inline_package_definition验证了 git 源码依赖的内联定义会保留源码 spec 并生成对应的构建后端而test_inline_package_requires_source确认了没有源码位置的纯内联定义会被拒绝。Platform单平台求解与虚拟包约束每个环境只为一个平台求解默认是当前平台。可以用--platform显式指定或直接编辑platform键[envs.vim] channels [conda-forge] platform osx-64 dependencies { vim * }一些包受__cuda这类虚拟包virtual packages约束。这些虚拟包会在每次求解环境时在本机探测因此pixi global install、update与sync都会遵守这些包对虚拟包施加的运行约束。你可以通过CONDA_OVERRIDE_*环境变量覆盖探测结果例如CONDA_OVERRIDE_CUDA12.0 pixi global install SomeCudaTool对应源码中set_platform见 manifest.rs会同步更新解析结果与 TOML 文档中的platform字段。Exposed executables控制暴露名称你可以用--expose指示pixi global install以什么名字暴露可执行文件pixi global install --expose birdbat bat清单会被修改为[envs.bat] channels [https://prefix.dev/conda-forge] dependencies { bat * } exposed { bird bat }这意味着可执行文件bat将以bird的名字暴露到系统PATH。自动暴露行为存在一些附加的自动行为如果你安装的包与环境的名字相同它会以相同的名字被自动暴露——即使该二进制实际是由包的依赖提供的。例如pixi global install ansible会生成[envs.ansible] channels [conda-forge] dependencies { ansible * } exposed { ansible ansible } # (1)!ansible二进制虽然由ansible的依赖包ansible-core安装但仍被自动暴露。还可以暴露位于嵌套目录中的可执行文件。例如 dotnet 的dotnet.exe位于 dotnet 文件夹内要暴露dotnet必须指定其相对路径pixi global install dotnet --expose dotnetdotnet\dotnet生成的清单条目为[envs.dotnet] channels [conda-forge] dependencies { dotnet * } exposed { dotnet dotnet\dotnet }源码层面Mapping见 manifest.rs保存暴露名 → 可执行文件相对路径的映射executable_relname支持带路径的匹配如dotnet/dotnet会找到$PREFIX/lib/dotnet/dotnetexecutable_name()只取路径最后一段单元测试test_mapping_executable_names验证了nested/test_executable与 Windows 下的nested\test_executable.exe均能正确归一化.exe/.sh等扩展名会被剥离。此外解析阶段会通过ensure_unique_exposed_names保证所有环境的暴露名全局唯一重复定义会直接报错。Shortcuts图形界面应用的开始菜单入口对于图形用户界面GUI应用添加快捷方式非常有用这样应用会出现在开始菜单中或在打开该应用支持的文件类型时被推荐。如果包本身支持快捷方式你无需做任何事——直接执行pixi global install即可。例如pixi global install mss会生成如下清单[envs.mss] channels [https://prefix.dev/conda-forge] dependencies { mss * } exposed { ... } shortcuts [mss]注意其中的shortcuts条目。只要它存在pixi 就会为mss包安装快捷方式应用随之出现在开始菜单中。如果你想自行打包一个能受益于此的应用可以查阅 menuinst 的相关文档参见 conda 的 menuinst 项目说明。与暴露名一样解析阶段也会通过ensure_unique_shortcut_names校验快捷方式名在全局唯一add_shortcut/remove_shortcut在 manifest.rs 中同步维护解析结果与 TOML 文档的shortcuts数组。清单的保存与一致性清单文件始终以version 1开头——即使手工编辑时漏写了版本号Manifest::save()见 manifest.rs在落盘前也会强制写入当前默认版本并通过pixi_utils::atomic_write原子写保证文件不会因中断而损坏。解析时若版本号高于或低于支持版本会分别给出请升级 pixi或请更新清单的明确提示环境中出现未知键如[envs.python.invalid]也会在解析阶段报错测试test_invalid_key覆盖了这类场景。由于清单是可编辑、可同步、可纳入版本控制并可与他人共享的纯 TOML 文件你可以像管理项目配置一样管理它把pixi-global.toml提交到你的 dotfiles 仓库即可在多台机器间复现同一套全局工具环境。赞分享开发工具CLI包管理器任务调度【免费下载链接】pixiPowerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.项目地址https://gitcode.com/gh_mirrors/pi/pixi点击查看免费下载相关推荐【免费下载】 Pixi项目安装与配置完全指南Pixi项目安装与配置完全指南 Pixi是一款高效的跨平台包管理工具本文将详细介绍如何在不同操作系统上安装和配置Pixi以及相关的进阶设置。 基础安装方法开发工具CLI包管理器任务调度SpeechBrain 基于 VoxLingua107 的语种识别Language ID实战指南从 WebDataset 数据管线到 ECAPA 模型训练与推理SpeechBrain 基于 VoxLingua107 的语种识别Language ID实战指南从 WebDataset 数据管线到 ECAPA 模型训练开发工具CLI包管理器任务调度Tempo 配置清单Manifest全解析完整配置项与默认值参考指南Tempo 配置清单Manifest全解析完整配置项与默认值参考指南 导读 本文以 Grafana Tempo 仓库中的 配置清单文档 https://l后端可观测性链路追踪上一篇Wand-Enhancer完整指南解锁WeMod高级功能的终极开源方案下一篇终极Wand增强工具免费解锁完整游戏修改体验的终极方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑