python 的项目管理
早期
放飞自我
曾经
- pip 安装包全局共享,不同项目需要的包版本互相冲突。依赖地狱,各自依赖。
- pip freeze 生成 requirement.txt
- 分不清直接依赖和间接依赖 卸载一个包,不会清理间接安装的其他包
虚拟环境 venv
- 创建命令
python3 -m venv .venv - 激活命令
source .venv/bin/activate - 本质是修改 sys.path
- 使用 pip + requirement.txt 管理 但是依赖是二维的
现在:
- Anaconda 公司的 conda: 商业软件 免费版 miniconda
- 第三方虚拟环境。
- 有自己的配置文件,库,python解释器,也支持其他语言。
- 有些包只在 Conda 找得到,有些只能在 PyPI 安装,两头切换非常麻烦。
- pixi
- 第三方虚拟环境。
- 打破 Conda 和 PyPI 的壁垒,让它们可以同时使用、互相补充。
- Python 解释器的安装与管理:按项目独立管理,支持所有主流平台。
- 跨平台依赖锁定:为每个主要平台分别锁定依赖,保证可复现性。
- 任务系统(带缓存):在项目里可以高效执行自定义任务,自动缓存避免重复工作。
- 多环境支持: 为同一个项目创建多个环境,灵活切换不同依赖组合(例如不同 Python 版本,或 CUDA / 非 CUDA 环境),并支持各自独立的任务配置。
- 官方体系 打包用 setuptools 和 hatchling ,管理安装项目用pip、uv 和 poetry
- 使用 pyproject.toml 管理依赖
pip install .使用 pyproject.toml 中的依赖列表 , 但是自己写的代码也会被安装到site-packages,影响开发 所以使用pip install -e .。来创建链接文件,避免开发的时候调试麻烦。- uv 和 poetry 不是官方工具 是社区工具
uv add 包名自动生成虚拟环境 生成依赖列表 安装所有依赖uv sync使用别人的依赖列表部署项目- 一样激活命令
source .venv/bin/activate使用虚拟环境 - 或者直接使用
uv run main.py,连激活都省略了