Skip to content

Python 虚拟环境

venv

  • 特点:Python 自带的虚拟环境管理工具,轻量级。
  • 优势:简单易用,无需额外安装。
  • 劣势:功能有限,无法指定系统中不存在的 Python 版本,也不能管理系统中的环境列表。虚拟环境默认存放在项目文件夹里,可能影响项目文件管理。

pipenv

  • 特点:结合了 pipvirtualenv 的功能,提供依赖管理和虚拟环境管理。
  • 优势:自动创建和管理虚拟环境,确保依赖与系统环境隔离。使用 PipfilePipfile.lock 记录依赖信息,保证项目在不同环境中的依赖一致性。
  • 劣势:不够稳定,多次运行 pip install 结果可能不一致。安装依赖时速度较慢,且问题依然存在。

conda (Anaconda/Miniconda)

  • 特点:主要面向数据科学领域,支持 Python 和其他语言的包管理。
  • 优势:适合科学计算新手,包含大量科学计算常用的包。Miniconda 体积较小,安装快速。
  • 劣势:Anaconda 过于臃肿,安装包大。Miniconda 安装依赖库时过于激进,可能导致项目膨胀。conda listpip list 结果可能不一致。

poetry

  • 特点:使用 pyproject.tomlpoetry.lock 文件管理依赖,类似于 JavaScript 的 Npm 和 Rust 的 Cargo。
  • 优势:依赖管理策略严格,保证依赖一致性。推荐与 pyenv/pyenv-win 结合使用,方便管理不同版本的 Python 解释器。
  • 劣势:较为复杂,上手困难。在国内无法设置全局镜像源,只可针对单个项目设置。

uv

  • 特点:使用 Rust 构建,结合了 pyenv 和 pip 的功能,现代且高效的依赖管理工具。
  • 优势
  • 使用 pyproject.toml 和 lock 文件管理依赖,现代且高效。
  • 集成 Python 解释器管理功能,方便下载和切换不同版本的 Python。
  • 自动更新 Python 小版本,无需手动到官网下载。
  • 支持复制项目到无 Python 环境的电脑上,只需 uv sync 即可自动安装 Python 解释器和依赖。
  • 集成 pipx 功能,方便安装和管理全局 Python 工具。
  • 即使偏好使用 pip,uv 也提供了 uv pip 系列命令,结合了 Rust 的高效和 pip 的灵活性。
  • 最新的 PyCharm 版本(2024.3.2 或以上)已添加 uv 支持,使用 PyCharm 和 uv 管理项目无需编写命令行。
  • 劣势:相对较新,社区不够成熟,遇到问题时可能较难找到解决方案。

选择建议

  • 简单项目或快速上手:使用 venv,适合对虚拟环境管理要求不高的用户。
  • 需要严格依赖管理和环境隔离:选择 pipenv,适合对依赖一致性要求较高的项目,但需注意其稳定性问题。
  • 数据科学和科学计算:推荐 conda,特别是当项目依赖大量科学计算包时。
  • 现代化依赖管理,追求灵活性和效率:使用 poetry,适合对依赖管理有较高要求且愿意投入时间学习的用户。
  • 寻求全能型工具,兼顾依赖管理和 Python 解释器管理:推荐 uv,特别适合追求高效和现代开发体验的用户,尽管其社区尚在发展中。

根据项目需求和个人偏好选择合适的工具,可以显著提升开发效率和项目管理水平。

Ref

https://zhuanlan.zhihu.com/p/663735038