pixi 项目中 pyproject.toml 与 pixi.toml 各司其职:前者仅保留 project 元信息(如 requires-python),后者统一管理 environments、dependencies 和 pypi-dependencies;删 build-system,明确区分 conda/pypi 来源,本地包用 pixi add --pypi --editable ./,windows 下注意 shell 路径与 pip 兼容性。

pixi 项目里 pyproject.toml 和 pixi.toml 冲突怎么办
当 pyproject.toml 里有 [build-system] 或 [project],而 pixi.toml 又定义了 environments 和 dependencies,pixi 默认会优先读 pixi.toml,但某些命令(比如 pixi build)又会去解析 pyproject.toml —— 这时容易出现依赖不一致、构建失败或环境安装错包。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 删掉
pyproject.toml中的[build-system]区块,除非你真要用build命令发布包;pixi 不需要它来管理环境 - 把 Python 包元信息(如
name、version、requires-python)保留在[project],pixi 会读取requires-python来选 Python 版本,但不会用dependencies替代pixi.toml中的dependencies - 确保
pixi.toml的[dependencies]和[pypi-dependencies]分开写:纯 conda 包走前者,PyPI-only 包(如rich、typer)必须显式放进后者,否则 pixi 会跳过它们
为什么 pixi add requests 装的是 conda-forge 版而不是 PyPI 版
pixi 默认行为是优先从 conda 渠道解析包名,requests 在 conda-forge 有同名包,所以它不会去 PyPI 查——哪怕你项目里其他包都走 pip,只要没声明来源,pixi 就按 conda 逻辑走。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 明确指定来源:
pixi add --pypi requests,强制走 PyPI;反之pixi add --conda requests强制走 conda(虽然通常没必要) - 如果团队混用 pip/conda 包,建议在
pixi.toml顶部加default-channel = ["conda-forge"],并在[pypi-dependencies]下统一列 pip 包,避免命令行反复加 flag - 注意
pixi lock生成的pixi.lock会固化来源渠道,改源后必须重锁,否则pixi install仍按旧 lock 安装
pixi run 找不到刚 pip install -e . 的本地包
pixi 启动的 shell 环境默认不继承当前 Python 的 sys.path,即使你用 -e 安装了本地包,pixi 的 Python 解释器也看不到,报 ModuleNotFoundError。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 不要在 pixi 环境外
pip install -e .;改用pixi add --pypi --editable ./,它会把本地路径写进pixi.toml的[pypi-dependencies]并参与 lock - 如果必须动态开发(比如边改边测),可在
pixi.toml的[tasks]里写:dev = "python -m pip install -e . && python main.py",把安装和运行串成一个 task - 避免在
pixi run后手动激活虚拟环境再跑命令——pixi 的环境隔离是进程级的,额外激活反而可能让 Python 路径混乱
Windows 上 pixi shell 启动后 pip 命令失效或路径错乱
pixi 在 Windows 默认启动 PowerShell,但部分 conda/pip 组合(尤其含 mamba 的旧版 pixi)会在 PS 里把 pip 解析成 conda 自带的 wrapper,导致升级 pip 后命令找不到,或报 ImportError: cannot import name 'main'。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 启动时指定 shell:
pixi shell --shell cmd或pixi shell --shell powershell,确认你用的是哪个,再针对性修复 - 如果用 PowerShell,运行前先执行:
$env:PATH = "$env:CONDA_DEFAULT_ENVScripts;" + $env:PATH(临时补上 Scripts 路径),或者在pixi.toml的[environment]下加shell-init = "powershell -Command "$env:PATH = '$env:CONDA_DEFAULT_ENV\Scripts;' + $env:PATH"" - 别用
python -m pip替代pip命令——pixi 的 Python 解释器路径是固定的,python -m pip更可靠,尤其在 CI 或多 Python 版本场景下
混合方案最难绷的点不是语法,而是「哪个文件管什么」的边界感:pixi.toml 管环境与任务,pyproject.toml 只管包元数据和构建逻辑,两者不 merge、不覆盖、也不自动同步。手一抖把依赖写错地方,debug 时就容易来回怀疑是不是自己漏锁、漏 install、漏 source。










