为什么用 pixi 替代 conda?
- 速度:pixi 采用 Rust 实现,比使用 Python 实现的 conda 更快
- 原生支持多语言与系统工具
- 现代配置:pixi.toml
- 比 environment.yml(YAML)更简洁、可读性强
- 支持定义任务(tasks),替代 Makefile 或 shell 脚本:
[tasks]train="python train.py"lint="ruff check ."
- 本地化环境管理
- Conda 默认将所有环境集中存放在全局目录(如 ~/miniconda3/envs/),
- 而 pixi 和 uv 则借鉴了 Rust/Cargo 的本地化理念,
- 默认在项目根目录下创建隔离的环境(如 .pixi/ 或 .venv/),
- 实现“每个项目自带运行时”,避免依赖冲突和全局污染。
为什么用 uv 替代 pip?
- 速度:uv 使用 Rust 编写,性能优越,安装依赖更快
- 一体化工具链:uv 集成了环境管理、依赖解析、锁定机制等功能,无需切换工具
- 传统 Python 工作流常需多个工具:
python-mvenv .venv# 创建环境source.venv/bin/activate# 激活pipinstall-rrequirements.txt# 安装pip freeze>requirements.lock# 锁定(不精确) - 而 uv 一条命令搞定:
uv venv# 创建虚拟环境uv pipinstall-rrequirements.txt# 极速安装uv lock# 生成精确的 `uv.lock`(类似 `poetry.lock`)
- 传统 Python 工作流常需多个工具:
- 依赖安装:
- pip install 只会安装缺失的包,不会清理多余的残留,导致环境污染
- 而 uv sync 会根据锁定文件uv.lock自动增删包,保持环境纯净
- 完全兼容现有生态
- 支持 requirements.txt、pyproject.toml、setup.py 等标准格式。
- 可直接替换项目中的 pip 命令,零迁移成本。
- 生成的标准虚拟环境,与 IDE(VS Code、PyCharm)无缝集成。
Pixi
安装
# Linux/macOScurl-fsSLhttps://pixi.sh/install.sh|sh# Windowspowershell-ExecutionPolicyByPass-c"irm -useb https://pixi.sh/install.ps1 | iex"# 安装会自动把pixi添加到环境变量中,但是需要重启终端才能使用pixi命令pixi--version# 如果安装成功,会显示pixi的版本号从头开始初始化一个项目
pixi init# ls -a# .gitattributes .gitignore pixi.toml添加包
pixiaddwandb# 添加 Conda 包pixiadd--pypiwandb# 添加 PyPI 包安装依赖
pixiinstall# 状态同步:根据 pixi.toml 自动增删pixi/envs/default中的依赖,保持环境纯净运行脚本
pixi run python script.pyuv
安装
# Linux/macOScurl-fsSLhttps://astral.sh/uv/install.sh|sh# 安装会自动把uv添加到环境变量PATH中,但是需要重启终端才能使用uv命令# echo 'export PATH="$HOME/.local/bin:$PATH"' >> /root/.bashrc# source /root/.bashrc# Windowspowershell-ExecutionPolicyByPass-c"irm https://astral.sh/uv/install.ps1 | iex"# 安装会自动把uv添加到环境变量中,但是需要重启终端才能使用uv命令uv--version# 如果安装成功,会显示uv的版本号从头开始初始化一个项目
uv init# ls -a# .git .gitignore .python-version README.md main.py pyproject.toml- 自动生成了标准的python项目结构和配置文件,非常好用
- 已有pyproject.toml文件,说明uv已经初始化成功了,再次执行uv init就会报错了
添加包
uvaddwandb- uv add 首次安装包时,会自动创建虚拟环境.venv,并且生成了uv.lock文件
- uv.lock 自动记录完整依赖树的精确快照,无需手动修改,必须提交到Git,才能保证可复现的环境
- uv add 会自动记录到项目的 pyproject.toml 中,保持依赖声明和锁定的一致性
安装依赖
uvsync# 状态同步:根据 project.toml 和 uv.lock 自动增删.venv/site-packages的依赖,保持环境纯净运行脚本
uv run script.py注:如果uv add和uv sync速度慢,可以为项目更换国内镜像源加速,在 pyproject.toml 中添加如下配置:
[tool.uv] [[tool.uv.index]] name = "tsinghua" url = "https://pypi.tuna.tsinghua.edu.cn/simple/" default = true选择使用哪个工具
- 多语言/复杂项目 → 全程用 pixi
- 纯 Python 项目 → 全程用 uv
- 不要混用:虽然 pixi 内部使用了 uv 的核心能力,但二者环境模型不同,混用易引发问题
uv进阶
uv cache prune# 只移除不再被任何项目引用的包,安全系数高uv cache clean# 会删光所有缓存,下次安装慢。uv cachedir# 查看 uv 当前的缓存目录mkdir-p/hy-tmp/.uv_cache# 先设置新缓存路径(避免清理后重新下载到老路径)echo'export UV_CACHE_DIR=/hy-tmp/.uv_cache'>>~/.bashrc# 永久设置环境变量grepUV_CACHE_DIR ~/.bashrc# 查看是否已写入 bashrcuv cache cleancd/hy-tmp/tadUV_LINK_MODE=copy uvsync# .venv是虚拟环境,Python包可以硬链接,但是非Python包(Torch、CV等)不能硬链接,所以还是会占用磁盘空间