6  项目环境管理:Pixi

Modified

2026-01-16

在生物信息学分析中,不同项目可能需要不同版本的R包和Python库。很多刚入门的同学可能会选择直接在全局环境中安装所需的包和库,但我不推荐这样做,因为:

  1. 依赖冲突:不同项目可能需要不同版本的同一包或库,直接安装在全局环境中可能导致版本冲突,影响项目的正常运行。
  2. 权限问题:如果您在服务器上工作,一般没有root权限,无法在全局环境中安装包和库。
  3. 可复现性差:直接在全局环境中安装包和库,难以记录和管理项目的依赖,影响分析结果的可复现性。

因此,我推荐使用环境管理工具来创建和管理隔离的项目环境。简单来说就是为每个项目单独安装所需的环境。这样,每个项目都有独立的环境,互不干扰,确保依赖的兼容性和可复现性。

环境管理工具有很多种,最常见的就是Conda/Mamba。除此之外,专门用于R的有renv,专门用于Python的有virtualenv和venv等。

在本章中,我们将重点介绍Pixi,这是一个以Conda/Mamba为基础的环境管理工具,可以同时安装R、Python等多种语言的包和库,并且速度很快,集成了以往环境管理工具的优点。Pixi有潜力成为下一代最佳的环境管理工具。

6.1 Conda、pip的基础知识

在学习Pixi之前,我们需要先了解一些背景知识。Pixi是基于Conda构建的,因此理解Conda和pip的基本概念对于使用Pixi很有帮助。

6.1.1 Conda和pip是什么

Conda是一个跨语言的包管理和环境管理系统。它不仅能管理Python包,还能管理R包、C库等二进制文件,非常适合生物信息学分析。Mamba是Conda的快速替代品,而Pixi则是基于Conda/Mamba的更现代化工具。

pip是Python官方的包管理工具,专门用于安装Python包。它从PyPI(Python Package Index)安装包,是Python生态中最常用的包管理器。

两者的主要区别:

  • Conda:多语言支持,处理系统依赖,适合复杂的科学计算和生物信息学环境
  • pip:仅Python包,速度快,包更新及时,但不处理系统级依赖
Tip混合使用Conda和pip

Pixi的另一个优势,就是可以让您无痛地同时使用conda和pip包:

  • 优先使用conda包(pixi add <package-name>
  • 对于conda中找不到的包,使用pip(pixi add --pypi <package-name>

6.1.2 Conda的频道(Channel)

Conda的频道(Channel)是存储和分发Conda包的仓库。最常用的频道有:

  • conda-forge:社区维护,包含最全面的包(20,000+),推荐优先使用
  • bioconda:专门用于生物信息学软件(9,000+工具)
  • defaults:Anaconda官方频道

在Pixi中,可以在pixi.toml文件中配置频道:

[project]
channels = ["conda-forge", "bioconda"]

6.1.3 如何搜索Conda包

在使用Pixi添加包之前,需要先确认包是否在Conda频道中,以及准确的包名。推荐的搜索方法:

Google搜索(最简单)

  • 搜索格式:<包名> conda
  • 例如:搜索DESeq2 conda,第一个结果通常就是Anaconda.org上的包页面

Anaconda.org网站

命令行搜索

pixi search <package-name>

6.2 安装和初始化Pixi

6.2.1 下载和安装Pixi

Pixi的安装非常简单,支持多种操作系统。根据您的系统选择相应的安装方法:

Linux和macOS

curl -fsSL https://pixi.sh/install.sh | bash

安装完成后,重启终端或运行 source ~/.bashrc(Linux)或 source ~/.zshrc(macOS)使配置生效。

Windows

在PowerShell中运行:

iwr -useb https://pixi.sh/install.ps1 | iex

验证安装

安装完成后,运行以下命令验证:

pixi --version

如果显示版本号,说明安装成功。

Tip更新Pixi

Pixi可以自我更新,运行以下命令即可更新到最新版本:

pixi self-update

6.2.2 初始化Pixi项目

安装好Pixi后,我们来创建第一个项目环境。在您的项目目录中运行:

# 创建并进入项目目录
mkdir my-bioinfo-project
cd my-bioinfo-project

# 初始化Pixi项目
pixi init

运行pixi init后,Pixi会在当前目录下创建一个pixi.toml配置文件。这个文件是Pixi项目的核心,记录了项目的所有依赖和配置。

6.2.3 理解pixi.toml配置文件

让我们看看pixi.toml文件的基本结构:

[project]
name = "my-bioinfo-project"
version = "0.1.0"
description = "Add a short description here"
authors = ["Your Name <your.email@example.com>"]
channels = ["conda-forge"]
platforms = ["linux-64"]

[tasks]

[dependencies]

主要配置项说明:

  • project:项目的基本信息(名称、版本、描述、作者)
  • channels:指定从哪些Conda频道获取软件包
  • platforms:指定支持的平台(如linux-64osx-64win-64
  • dependencies:项目依赖的软件包列表
  • tasks:自定义的任务命令(可选)

6.2.4 添加bioconda频道

对于生物信息学项目,我们通常需要添加bioconda频道。编辑pixi.toml文件,修改channels配置:

channels = ["conda-forge", "bioconda"]  # 添加bioconda

或者使用命令行添加:

pixi project channel add bioconda
Note频道顺序很重要

channels列表中,频道的顺序决定了包的搜索优先级。列表中靠前的频道优先级更高。推荐的顺序是:

channels = ["conda-forge", "bioconda"]

这样可以确保从最全面的conda-forge和生物信息学专用的bioconda中获取包。

6.2.5 跨平台支持

如果您的项目需要在多个平台上运行(比如在Linux服务器和本地macOS上),可以在platforms中添加多个平台:

platforms = ["linux-64", "osx-64", "osx-arm64"]

这样Pixi会为每个平台解析合适的依赖版本。

6.3 使用Pixi添加包

因为Pixi是基于Conda/Mamba的,所以当我们想要安装某个包时,我们首先需要确认这个包是否在Conda的频道中发行。如前所述,我们常用的频道有两个,conda-forgebioconda。conda-forge中包括了绝大多数CRAN和PyPI中的包,而bioconda中则包含了大量生物信息学相关的软件包。也就是说,在大多数情况下,我们可以直接从这两个频道中找到我们需要的包。

例如,我们想要安装R包DESeq2,这是一个非常常用的差异表达分析包。我们需要:

  1. 在谷歌中搜索DESeq2 conda,第一个结果就是Bioconductor Deseq2 | Anaconda.org
  2. 我们点进去,看到这个包在bioconda频道中发行,它的包名是bioconductor-deseq2
  3. 然后我们就可以使用Pixi来安装它了。在终端中进入我们的项目目录,运行pixi add bioconductor-deseq2,而后Pixi会解析环境依赖,并将其添加到pixi.toml文件中。
  4. 注意,此时这个包只是被添加到了环境配置文件中,并没有真正安装。如果您还有其他包需要添加,可以继续使用pixi add <package-name>命令添加。等您把所有需要的包都添加完后,再运行pixi install命令,Pixi才会根据pixi.toml文件中的配置,真正安装所有的包到项目环境中。
ImportantImportant

需要注意的是,Conda中的包名通常和CRAN或PyPI中的包名有所不同,通常会有一些前缀或后缀。例如,我们在R中安装DESeq2,只需要运行install.packages("DESeq2"),但在Conda中,我们需要安装bioconductor-deseq2。因此,在使用Pixi添加包时,一定要先确认包名。

一般的规律是,CRAN中的R包在Conda中通常会有r-前缀,如r-ggplot2;而Bioconductor中的R包通常会有bioconductor-前缀,如bioconductor-deseq2。Python包则通常和PyPI中的包名一致,但有时也会有一些差异。

6.4 Pixi常用命令

用于管理局部项目环境的Pixi常用命令:

  • pixi init:在当前目录下初始化一个新的Pixi项目,生成pixi.toml文件。
  • pixi add <package-name>:将指定的包添加到项目环境中,并更新pixi.toml文件。
  • pixi remove <package-name>:将指定的包从项目环境中移除,并更新pixi.toml文件。
  • pixi install:根据pixi.toml文件中的配置,安装所有的包到项目环境中。
  • pixi run <package-command>:在项目环境中运行指定的包命令。例如,当您在Pixi环境中安装了R后,可以使用pixi run R来启动R环境。

用于管理全局环境的Pixi常用命令:

  • pixi global install <package-name>:将指定的包安装到全局环境中。
  • pixi global uninstall <package-name>:将指定的包从全局环境中移除。
  • pixi global list:列出全局环境中已安装的包。

6.5 全局工具安装

在前面的章节中,我们学习了如何在项目环境中安装包。这些包只能在特定项目中使用,每个项目有独立的环境。但有些工具我们希望在任何地方都能使用,这时就需要全局安装。

6.5.1 何时选择全局安装

适合全局安装的工具

  • 开发工具:如代码编辑器、终端复用器(zellij、tmux)、版本控制工具等
  • 通用命令行工具:如文件搜索工具(fd、ripgrep)、系统监控工具(htop、btop)等
  • 常用分析工具:如果某个工具在您的所有项目中都使用同一个版本,可以考虑全局安装
  • 项目管理工具:如pixi自身、mamba、ruff等

应该使用项目级安装的包

  • 分析包和库:生物信息学分析包(如DESeq2、Seurat)、统计分析包等
  • 版本敏感的包:不同项目可能需要不同版本的包
  • 项目依赖:任何与特定项目分析流程相关的包
  • 数据处理工具:可能在不同项目中需要不同版本的工具
Tip判断原则

问自己两个问题:

  1. 这个工具在所有项目中都用相同版本吗? 如果是,考虑全局安装
  2. 这个工具是为了开发环境,还是分析流程? 开发工具全局安装,分析工具项目安装

当不确定时,优先选择项目级安装,这样更安全且可复现。

6.5.2 全局安装示例

安装终端复用器Zellij

pixi global install zellij

安装多个工具

pixi global install fd ripgrep bat

安装完成后,这些工具会自动添加到系统PATH中,您可以在任何目录直接使用。

查看已安装的全局工具

pixi global list

卸载全局工具

pixi global uninstall zellij
Note全局环境的存储位置

Pixi的全局工具安装在用户目录下的.pixi文件夹中,不会影响系统环境或其他用户。这意味着:

  • 不需要root权限
  • 不会污染系统环境
  • 每个用户有独立的全局环境
  • 可以随时完全删除(删除~/.pixi目录即可)

6.6 安装非Conda包

对于有些包,作者没有在Conda频道中发行。这时我们需要首先查看该包的GitHub页面,查看作者提供的官方安装方法。我们分为Python包和R包两种情况来讲解。

  • Python包:有一些包只能使用Pypi途径安装,尤其是需要使用cuda等GPU加速的深度学习包(如torch、tensorflow等)。这时我们可以使用Pixi的Pypi方式来安装,例如pixi add --feature scvi_cuda --pypi "scvi-tools[cuda]"
  • R包:有些R包只能通过CRAN或Bioconductor安装,这时我们可以使用打开Pixi安装的R环境,然后在R中使用install.packages()BiocManager::install()来安装。但我更推荐使用Pak这个R包管理工具来安装,因为它可以简单地使用pak::pkg_install("package-name")来安装CRAN、Bioconductor和GitHub中的R包,并且能自动处理系统依赖问题。