实际工作中,不同项目可能依赖不同的 Python 版本,比如一个老项目必须用 Python 3.8,一个新项目想尝鲜 Python 3.12。直接在系统里装多个版本很容易乱套,这时候就需要专门的多版本管理工具来让多个 Python 版本和平共处。
目前最主流的选择是 pyenv(轻量级,专注 Python 版本切换)和 conda(重量级,带完整包管理和环境管理)。
pyenv:轻量级多版本管理
pyenv 的核心思路是:在用户目录下安装多个 Python 版本,并通过修改环境变量来切换当前使用的版本。
- 安装 Python 版本:
pyenv install 3.10.13 # 安装指定版本
pyenv install 3.12.1
pyenv versions # 列出所有已安装版本
- 切换版本的方式:
pyenv global 3.12.1 # 全局默认版本
pyenv local 3.10.13 # 当前目录及子目录下生效(写进 .python-version 文件)
pyenv shell 3.9.18 # 仅当前终端会话生效
优先级:shell > local > global。
- 实际体验:进入项目目录后,python、pip 等命令自动指向对应版本,就像给每个项目贴了一张“用哪个版本”的标签。
- 搭配 virtualenv:pyenv 只管理 Python 版本,不管理包的隔离。通常和 pyenv-virtualenv 插件结合,为每个项目同时锁定 Python 版本及项目专属的虚拟环境。
适用场景:你想精确控制 Python 解释器版本,但不需要 conda 的大而全生态;或你主要在 Linux/macOS/WSL 环境下开发。
conda:跨平台的环境和包管理器
conda 是 Anaconda/Miniconda 发行版附带的工具,它把“管理 Python 版本”和“管理第三方包”统一在一个环境中,而且还支持非 Python 依赖(比如 C 库),特别适合数据科学场景。
- 创建并激活环境:
conda create -n myenv python=3.10 # 创建一个叫 myenv 的环境,内置 Python 3.10
conda activate myenv # 激活环境
- 切换与退出:
conda activate another-env
conda deactivate # 退出当前环境回到 base
- 列出所有环境:
conda env list
- 重要细节:
- conda 环境默认存放在
conda安装目录下的envs文件夹里,每个环境完全独立,有自己的 Python 二进制、pip 和第三方包。 - conda 可以安装非 Python 包(如 numpy 需要的 MKL 优化库),能避免一些编译安装的麻烦,这对 Windows 用户尤其友好。
适用场景:数据科学、机器学习项目,经常需要 numpy、pandas、scipy 等科学计算包;或者在 Windows 下希望一切开箱即用。
到底该选哪个?
- 如果你的主要工作是通用 Python 开发、Web 后端、脚本,且习惯 pip 管理依赖:用 pyenv + venv 或 pyenv-virtualenv,轻量且透明。
- 如果你从事数据科学、AI 方向,或者项目需要大量 C 扩展且不想折腾编译:直接用 conda,环境管理和包管理一步到位。
- 混用的项目组:很多团队在 conda 环境里也使用 pip 安装 conda 没收录的包,两者并不冲突(但建议先 conda 安装,不足再 pip,并留意兼容性)。
无论哪种方式,本质目的都是给每个项目一个干净、独立、可复现的 Python 环境,避免版本冲突和依赖地狱。