Python 多版本依赖如何隔离?

最标准做法是用venv隔离Python版本和依赖,pyenv管理多版本解释器,requirements.txt固化依赖,Poetry/pdm提供集成化管理。

用虚拟环境隔离不同项目的 Python 版本和依赖,是最标准、最可靠的做法。

用 venv 创建轻量级虚拟环境

Python 3.3+ 自带 venv 模块,无需额外安装。每个项目单独建一个环境,互不干扰:

  • 进入项目目录,运行 python -m venv venv(生成名为 venv 的文件夹)
  • 激活环境:
      • Windows:venv\Scripts\activate.bat
      • macOS/Linux:source venv/bin/activate
  • 激活后命令行前缀会显示环境名,此时 pythonpip 指向该环境内的解释器和包管理器
  • pip install 安装的包只存在于当前环境,不影响系统或其他项目

用 pyenv 管理多个 Python 解释器版本

当项目需要不同 Python 大版本(如 3.8、3.11、3.12),pyenv 能帮你下载、切换全局或局部的 Python 版本:

  • 安装 pyenv(按官方文档方式,如 macOS 用 brew install pyenv
  • 查看可用版本:pyenv install --list | grep "3\.[89]|3\.1[12]"
  • 安装某个版本:pyenv instal

    l 3.11.9
  • 设为当前目录默认:pyenv local 3.11.9(会在目录下生成 .python-version 文件)
  • 之后再用 python -m venv venv,创建的就是 3.11.9 对应的虚拟环境

用 requirements.txt 固化依赖版本

避免“在我机器上能跑”的问题,每个环境应导出明确的依赖清单:

  • 生成当前环境所有包及版本:pip freeze > requirements.txt
  • 新环境里一键安装:pip install -r requirements.txt
  • 建议在 requirements.txt 顶部加注释说明对应 Python 版本,例如:
    # Python 3.11.9
  • 生产环境可进一步拆分:requirements-base.txt(核心依赖)、requirements-dev.txt(开发工具),用 -r base.txt 引用

现代替代方案:Poetry 或 pdm

如果想统一管理 Python 版本、虚拟环境和依赖,Poetry 和 pdm 是更集成的工具:

  • 它们自动创建隔离环境,并通过 pyproject.toml 声明依赖和 Python 版本约束
  • 例如 Poetry 中写 requires-python = "^3.11",运行 poetry install 时会自动匹配并激活合适版本的环境
  • 依赖解析更严谨,支持锁定文件(poetry.lock),确保多人协作时行为一致
  • 适合中大型项目或团队,学习成本略高于 venv + pip,但长期维护性更好