/ Technical / 62浏览

Python全能依赖管理器pixi

之前介绍过uv管理器,它相比pip具有更快的编译安装速度,但是它也有明显的缺点,存在许多环境可能无法依赖进行有效的编译安装,例如cuda、rust等依赖,如果系统环境缺少相关依赖,则十分容易安装失败。而conda虽然具有很好的兼容性,可以自我解决依赖问题,但是由于其操作复杂,并且在删除卸载时仍然存在某些残留。由此,新的一个python管理器诞生了,pixi具有uv的并行安装速度,由于其基于conda环境的,因此又具有极好的环境依赖性,因此可以作为全能的python依赖管理器。

0. pixi简介及优势

  • pixi是一个集成了uv的快速并行安装以及conda的多环境的python环境依赖管理器,它既有uv安装的速度,又具有conda的跨平台特性,是一个全能好用的编译器

  • 其主要优点有以下几点:

    • 跨平台性:可以配置不同平台底层自动使用conda安装相关环境的依赖

    • 项目隔离性:与conda不同,它的整个环境和安装是完全基于项目运行和隔离的,也不需要激活和删除环境

    • 构建多样性:利用conda的机制,可以自动在不同平台下进行混合rust、c++编译安装,不用担心环境依赖问题

1. pixi安装及常用命令

1.1 pixi安装和卸载命令

# Linux & macOS
curl -fsSL https://pixi.sh/install.sh | sh
或
wget -qO- https://pixi.sh/install.sh | sh

# windows
powershell -ExecutionPolicy ByPass -c "irm -useb https://pixi.sh/install.ps1 | iex"
  • 升级命令

# 升级到最新版本
pixi self-update

# 升级到指定版本
pixi self-update --version x.y.z
  • 命令行自动填充提示功能

# 添加到.bashrc 末尾
eval "$(pixi completion --shell bash)"
  • 卸载pixi

# 删除任何缓存数据
pixi clean cache

# 从pixi项目中删除环境
cd path/to/project && pixi clean

# 删除全局pixi环境
rm -r ~/.pixi

# 删除.bashrc文件中的PATH引用

1.2 常用命令

  • 常用命令一览:

    • pixi init - 在当前目录下创建一个pixi的环境

    • pixi add - 安装一个依赖

    • pixi remove - 移出一个依赖

    • pixi update - 更新依赖到配置文件中

    • pixi upgrade - 升级所有依赖到最新版本,即使限制了版本

    • pixi lock - 创建或更新一个版本锁定文件

    • pixi info - 显示当前项目信息

    • pixi run - 执行一个特定的task任务

    • pixi shell - 在当前命令行下激活依赖环境

    • pixi list - 列出当前项目下的所有依赖

    • pixi tree - 以树结构的模式展示当前环境依赖

    • pixi clean - 完全移出当前项目的环境依赖

(1)初始化项目

  • 使用初始化项目后,可以在pixi.toml中配置项目的相关通道配置以及依赖环境设置,特别的,可以在这里设置清华源的镜像

pixi init my_project

# 使用命令初始化后创建这些文件
my_project
├── .gitattributes
├── .gitignore
└── pixi.toml
[workspace]
authors = ["Jane Doe <jane.doe@example.com>"]
#channels = ["conda-forge"]
channels = [
    "https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main",
    "https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r",
    "https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2",
    "https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge"
]
name = "my_project"
platforms = ["osx-arm64"]
version = "0.1.0"

[tasks]

[dependencies]

(2)管理环境依赖

  • 管理系统环境依赖:pixi通常情况下使用conda环境下载并安装依赖,可以通过命令进行快速设置和安装,等效于使用conda install

pixi add python==3.10

# 将会在pixi.toml中创建一条依赖配置
[dependencies]
python = "==3.10"
  • 使用pypi依赖:pixi也可以指定使用pypi进行依赖的安装,等效于使用pip install

pixi add --pypi requests

# 将会在pixi.toml创建一条依赖配置
[pypi-dependencies]
requests = ">=2.31.0,<3"

(3)添加脚本任务

  • pixi支持创建一个脚本命令到项目中,用于使用pixi快速启动脚本

pixi task add hello "echo Hello, World!"

# 将会在pixi.toml创建一条task配置
[tasks]
hello = "echo Hello, World!"

# 可以通过以下命令执行脚本
pixi run hello

(4)激活环境

  • pixi创建的虚拟环境路径并不在项目目录中,因此需要使用pixi run python 执行,也可以通过以下命令激活当前项目环境后执行

pixi run python -VV
# or:
pixi shell
python -VV
exit

(5)管理全局依赖命令

  • pixi可以支持全局安装依赖和工具,可以从任何地方使用

  • pixi global install - 安装一个全局环境的运行空间

  • pixi global uninstall - 卸载一个全局环境的运行空间

  • pixi global add - 添加一个依赖到当前的全局环境中

  • pixi global sync - 从全局环境中同步安装的依赖,展示你想安装的依赖

  • pixi global edit - 编辑全局环境配置文件

  • pixi global update - 更新全局环境配置

  • pixi global list - 展示已经安装的全局环境

2. pixi的多环境隔离

  • pixi的环境隔离有以下三种不同的配置参数:

    • Default

      • 只使用[dependencies]进行所有的依赖管理,默认的模式。

    • Feature

      • 使用[feature.<name>.*] 进行一个独立的依赖环境进行管理,一个Feature具有完全独立的tasks, dependencies, platforms, channels 等配置,与其他环境是隔离的

    • Environment环境

      • 一个Environment是由一系列Feature组成,它是定义在一个workspace中所有环境集合,通常添加在[environments] 块中

  • 初始化workspace

# 初始化一个项目路径,并安装python环境
pixi init workspace
cd workspace
pixi add python

# 然后创建出以下文件目录
├── .pixi
│   └── envs
│       └── default
├── pixi.lock
└── pixi.toml

# 此时会创建一个.pixi/envs/default目录,如果没有指定环境,则会使用这个默认环境配置
  • 添加一个Feature环境

# 例如创建一个test的feature环境,并安装pytest依赖
pixi add --feature test pytest

# 此时等效于在pixi.toml配置中添加
[feature.test.dependencies]
pytest = "*"
  • 添加一个environment环境

# 创建一个test的environment环境,并把feature添加进去
pixi workspace environment add test --feature test

# 此时等效于pixi.toml文件中添加
[environments]
test = ["test"]
  • 经过上述步骤创建了一个test环境后,因此可以直接通过该环境执行pytest

pixi run --environment test pytest --version

2.1 创建各种环境示例

  • 创建多python环境

# 创建不同python的feature
pixi add --feature py311 python=3.11
pixi add --feature py312 python=3.12

# 执行不同环境的python以及默认环境
pixi run --environment test-py311 test
pixi run --environment test-py312 test
# Or using the task directly, which will spawn a dialog to select the environment of choice
pixi run test

2.2 依赖环境隔离

(1)安装隔离

  • pixi支持conda和pip的隔离安装方式,使用pixi add后会自动识别依赖选择使用conda或者pip安装,默认是conda优先安装

# 使用conda执行安装
pixi add xxxxx

# 使用pip安装
pixi add --pypi xxxxx

(2)运行平台隔离

  • pixi支持不同目标平台的环境隔离,可以选择隔离安装目标平台的架构所对应的依赖

# 例如安装windows架构的依赖
pixi add --platform win-64 xxxxx

# 安装macos机构的依赖
pixi add --platform osx-64 xxxxx

# 安装linux架构的
pixi add --platform linux-64 xxxxx

达达下雨不吃鱼
Nvidia驱动安装与升级详细说明
Linux优雅的使用后台启动脚本
服务器运维踩坑指南
Git子模块的使用
零信任点对点组网——Netbird
Python极速环境依赖管理工具uv