早期

放飞自我

曾经

  • pip 安装包全局共享,不同项目需要的包版本互相冲突。依赖地狱,各自依赖。
  • pip freeze 生成 requirement.txt
  • 分不清直接依赖和间接依赖 卸载一个包,不会清理间接安装的其他包

虚拟环境 venv

  • 创建命令 python3 -m venv .venv
  • 激活命令 source .venv/bin/activate
  • 本质是修改 sys.path
  • 使用 pip + requirement.txt 管理 但是依赖是二维的

现在:

  1. Anaconda 公司的 conda: 商业软件 免费版 miniconda
    • 第三方虚拟环境。
    • 有自己的配置文件,库,python解释器,也支持其他语言。
    • 有些包只在 Conda 找得到,有些只能在 PyPI 安装,两头切换非常麻烦。
  2. pixi
    • 第三方虚拟环境。
    • 打破 Conda 和 PyPI 的壁垒,让它们可以同时使用、互相补充。
    • Python 解释器的安装与管理:按项目独立管理,支持所有主流平台。
    • 跨平台依赖锁定:为每个主要平台分别锁定依赖,保证可复现性。
    • 任务系统(带缓存):在项目里可以高效执行自定义任务,自动缓存避免重复工作。
    • 多环境支持: 为同一个项目创建多个环境,灵活切换不同依赖组合(例如不同 Python 版本,或 CUDA / 非 CUDA 环境),并支持各自独立的任务配置。
  3. 官方体系 打包用 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 ,连激活都省略了