Python 虚拟环境

21 阅读3分钟

1.为什么我们需要虚拟环境?

依赖冲突:项目 A 需要 Django 2.x,项目 B 需要 Django 4.x,全局安装会导致一个项目崩溃。

环境复现困难:代码在自己电脑上能跑,发给同事或部署到服务器就报错(“在我机子上明明能跑”的经典噩梦)。

全局环境污染:随意安装和卸载包,导致系统 Python 环境变得极其混乱且难以清理。


2.虚拟环境到底是什么?

隔离机制:虚拟环境本质上是一个独立的文件夹,里面包含了专属的 Python 解释器和第三方包(site-packages)。

独立性:激活虚拟环境后,所有的 pip install 操作都只会影响当前环境,与系统全局环境和其他项目完全隔离。


3.主流虚拟环境

粘贴的图像.png
工具定位与特点适用场景
venvPython 3.3+ 内置,零依赖,最轻量简单项目、初学者入门、CI/CD 流程
uv新世代工具(Rust 开发),极速(比 pip 快百倍)追求极致速度的现代项目、大型 Web 应用
conda强大的包与环境管理器,擅长处理非 Python 依赖(如 CUDA, MKL)数据科学、机器学习、AI 深度学习

conda下载时要注意 Anaconda 和 Miniconda 是同一个东西 图片.png 图片.png

Anaconda 是为了“省事”而牺牲了空间,适合新手快速上手;Miniconda 是为了“效率”而牺牲了便利,适合追求极致和定制化的进阶用户。 |

4. 实战演练:

提供一套标准、可复制的操作流程,覆盖虚拟环境的完整生命周期:

  • 创建环境python -m venv .venv(建议统一命名为 .venvvenv)。

  • 激活环境

    • Windows (CMD/PowerShell):.venv\Scripts\activate
    • Linux/macOS:source .venv/bin/activate
  • 验证环境:使用 which python (Linux/Mac) 或 where python (Windows) 查看当前 Python 路径,确认是否指向了虚拟环境内部。

图片.png

  • 安装依赖pip install requests 等常规操作。

  • 小问题一:pip 是什么(默认已安装,无需额外安装)?
  • pip 是 Python 自带的的包管理器。pip 从 PyPI(Python 官方第三方库)下载包,把包安装到当前 Python 环境的 site-packages,并记录版本信息,供 import 使用。

  • 小问题二:那 pip 和虚拟环境有啥关系?
  • 我们都知道,虚拟环境就是为了在不同项目中用不同或不同版本的包的。既然要安装特定版本的包,不就自然要用到 pip 了吗。 虚拟环境决定“装到哪”,而 pip 负责“装什么”

  • 举例: (.venv) shengge@shengge:~/PycharmProjects/base$ pip install rich

  • 退出与删除:使用 deactivate 退出;直接删除 .venv 文件夹即可彻底清除环境。


5. 进阶与协作:如何让环境“可复现”

  • 依赖导出:使用 pip freeze > requirements.txt 生成依赖清单。

图片.png

  • 环境复现:同事或服务器通过 pip install -r requirements.txt 一键还原一模一样的开发环境。

  • 进阶技巧

    • 指定特定的 Python 版本创建环境,会在虚拟环境中自己下载特定版本python(如 python3.9 -m venv myenv)。
    • 开发与生产依赖的分离(requirements-dev.txtrequirements.txt)。

6. 避坑

  • 致命陷阱:忘记激活环境就安装包,导致包被装到了全局。
  • IDE 集成:在pycharm右下角可以选择不同的虚拟环境 图片.png
  • 命名规范:不要使用 env1, test 这种随意的名字,推荐使用 .venv 统一命名,并在 .gitignore 中忽略该文件夹,不要将虚拟环境上传到 GitHub。