从 conda 或 mamba 迁移到 pixi#
欢迎使用本指南,帮助你从 conda 或 mamba 迁移到 pixi。
本文将比较这两个工具之间的关键命令和概念,重点介绍 pixi 在管理环境和包方面的独特方法。
通过 pixi,你将体验到基于项目的工作流,提升开发效率,并轻松分享你的工作。
为什么选择 Pixi?#
Pixi 基于 conda 生态系统,提出了一种以项目为中心的方法,而不仅仅是专注于环境。
这种转变使得管理依赖和运行代码变得更加有序和高效,符合现代开发实践。
关键区别一览#
| 任务 | Conda/Mamba | Pixi |
|---|---|---|
| 安装 | 需要安装程序 | 下载并添加到 PATH 中(见 安装指南) |
| 创建环境 | conda create -n myenv -c conda-forge python=3.8 |
pixi init myenv 然后 pixi add python=3.8 |
| 激活环境 | conda activate myenv |
在项目目录中使用 pixi shell |
| 停用环境 | conda deactivate |
在 pixi shell 中使用 exit |
| 运行任务 | conda run -n myenv python my_program.py |
pixi run python my_program.py(见 run) |
| 安装包 | conda install numpy |
pixi add numpy |
| 卸载包 | conda remove numpy |
pixi remove numpy |
没有 base 环境
Conda 有一个 base 环境,这是你启动新 shell 时的默认环境。
Pixi 不使用 base 环境。它要求你在项目或全局安装所需的工具。
使用 pixi global install bat 将会在全局环境中安装 bat,这与 conda 中的 base 环境不同。
在当前 shell 中激活 pixi 环境
对于一些高级用例,你可以在当前 shell 中激活环境。
这使用了 pixi shell-hook,它会打印激活脚本,你可以用它在当前 shell 中激活环境,而无需使用 pixi 本身。
环境与项目#
Conda 和 mamba 专注于环境管理,而 pixi 强调项目管理。
在 pixi 中,项目是一个包含 manifest(pixi.toml / pyproject.toml)文件的文件夹,描述了项目内容、一个 pixi.lock 锁文件,描述了具体的依赖,还有一个 .pixi 文件夹,包含了环境。
这种基于项目的方法使得共享和协作变得更加容易,因为项目文件夹包含了所有必要的信息来重建环境。 它支持在一个项目中管理多个环境,适应不同平台,并允许轻松切换。(见 多个环境)
全局环境#
Conda 将所有环境安装在一个全局位置。
如果你需要这种文件系统结构,可以使用 pixi 的 detached-environments 功能:
pixi config set detached-environments true
# 或者指定一个位置
pixi config set detached-environments /path/to/envs
pixi shell -n 来激活环境。
pixi 有 pixi global 命令来安装工具到你的机器上。(见 global)
这并不是 conda 的替代品,但它的工作方式类似于 pipx 和 condax。
它为给定的需求创建一个单独的隔离环境,并将二进制文件安装到全局路径中。
永远不要用 pixi global 安装 pip
使用 pixi global 安装的工具将创建一个单独的隔离环境。
用 pixi global 安装 pip 会在该隔离环境中创建一个新的 pip 二进制文件。
使用这个 pip 二进制文件会在该环境中安装包,导致这些包无法在其他地方访问,因为你无法激活它。
自动切换#
通过 pixi,你可以将 environment.yml 文件导入到 pixi 项目中。(见 import)
environment.yml 文件中的依赖创建一个新项目。
故障排除#
在迁移到 pixi 时,可能会遇到一些问题,以下是一些常见问题的解决方案:
- 依赖
is excluded because due to strict channel priority not using this option from: 'https://conda.anaconda.org/conda-forge/'这个错误发生在包存在于多个频道时。pixi使用严格的频道优先级。了解更多信息,见 频道优先级。 pixi global install pip,pip无法工作。pip安装在全局隔离环境中。请在项目中使用pixi add pip安装pip,并使用该项目环境。pixi global install <任何库>->import <任何库>->ModuleNotFoundError: No module named '<任何库>'该库安装在全局隔离环境中。请在项目中使用pixi add <任何库>安装该库,并使用该项目环境。