之前介绍过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安装和卸载命令
pixi可以参考官网进行安装:
https://pixi.sh/latest/installation/ 使用官方脚本一键安装
# 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 --version2.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 test2.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