写给新手的 Python 虚拟环境 (venv) 避坑指南

如果你刚开始接触 Python,你一定在各种教程里看到过类似 python3 -m venv venv 的命令。很多新手都是照猫画虎,知其然而不知其所以然。

这篇博客将把你脑海中关于 Python 环境管理、pip 安装以及虚拟环境的所有问号,一次性全部拉直。


1. 为什么我们需要虚拟环境?(痛点)

想象一下,如果不加隔离,所有的 Python 第三方库都安装在系统的全局环境里,会发生什么?

  • 你两年前的老项目 A 依赖 Django 2.0
  • 你今天的新项目 B 依赖 Django 5.0

如果你直接运行 pip install Django==5.0,全局环境里的旧版本就会被覆盖。项目 B 跑通了,但你的项目 A 就彻底崩溃了。

这就是大名鼎鼎的**“依赖地狱”**。


2. 什么是 venv?

venv 是 Python 官方提供的一个内置模块。它的作用是给你的每一个项目建造一个绝对物理隔离的“小房间”(沙盒)。

无论你在沙盒里怎么安装、卸载第三方库,怎么把环境弄得一团糟,都绝对不会影响到你电脑上的全局 Python,也不会影响其他项目的小房间。


3. pip install 到底在干嘛?

在了解具体操作前,我们要先明白最常见的命令 pip install requests 是什么意思。把它当作手机操作,你就懂了:

  • pip:Python 官方的“应用商店”(包管理器)。
  • install:动作指令,“下载并安装”。
  • requests:你要下载的“App”名字。这通常是根据你项目的需求决定的(比如做网页请求装 requests,做数据分析装 pandas)。

如果项目里有一个 requirements.txt 清单文件,你可以直接运行 pip install -r requirements.txt,应用商店就会帮你一键下载清单里的所有积木块。


4. venv 日常操作四步曲

只要开始写新的 Python 项目,第一件事永远是建虚拟环境!

第一步:创建沙盒

⚠️ 注意:Ubuntu/Debian 用户专属避坑 系统为了精简体积,默认自带的 Python3 可能没有打包 venv 模块。如果你是全新的系统,在第一次建沙盒前,需要先运行一条命令安装该模块:sudo apt install python3-venv。其他系统(如 Mac/Windows)可忽略此步。

在你的项目文件夹下,打开终端运行:

python3 -m venv .venv

(这会在当前目录下生成一个名为 .venv 的文件夹,这就是你的沙盒。)

第二步:激活沙盒

# Mac/Linux 系统:
source .venv/bin/activate

# Windows 系统:
.venv\Scripts\activate

(激活后,命令行最左边会多出一个 (.venv) 的前缀,说明你已经成功进入沙盒!)

第三步:在沙盒里自由安装

此时你再运行 pip install,所有的库都会被乖乖地安装进 .venv 文件夹里,绝不会污染系统。

第四步:退出沙盒

今天开发完了,想退出这个沙盒回到全局环境,只需要敲一个词:

deactivate

5. 关于名字和路径的常见疑惑

Q1:我看好多教程名字都叫 venv,这个名字可以随便改吗? 完全可以!python3 -m venv <你想起的名字>。 但这就像一种江湖规矩,大家约定俗成喜欢用 venv 或者 .venv(加个点变成隐藏文件夹,看着更干净)。统一命名的好处是,代码编辑器(VS Code/PyCharm)能自动识别它,而且在提交 Git 代码时,只要在 .gitignore 里忽略这个名字,就不会把几百兆的环境文件错传到网上去。

Q2:不同项目目录下,可以用同一个名字吗? 强烈推荐用同一个名字!因为虚拟环境本质上就是一个普通的文件夹。/项目A/.venv//项目B/.venv/ 是两个物理上完全隔离的路径,它们就像 C 盘和 D 盘里都有一个叫 test 的文件夹一样,绝对不可能冲突。

Q3:我想删掉项目,或者把环境推倒重来,怎么删干净? 超级简单:直接删掉那个文件夹就行了! venv 完全不会在系统注册表、环境变量或者深层目录里留下任何“牛皮癣”。你不想要了,直接右键删除文件夹,或者 rm -rf .venv。删完后不留一丝痕迹,一秒钟就能用命令再重新建一个崭新的纯净环境。毫无心理负担!


TIP

现在的 Linux(如 Ubuntu 24.04)出于系统安全考虑,已经开始强制禁止在全局使用 pip 安装包(会报 externally-managed-environment 错误)。所以,熟练掌握 venv 已经是每个 Python 人的必修课了。