Python 虚拟环境
Python 虚拟环境
Python 虚拟环境的核心操作
虚拟环境是 Python 项目开发的必备工具,它能为每个项目创建独立的包环境,避免不同项目之间的依赖冲突。
下面以最常用的 venv 模块(Python 3.3+ 内置)为例,讲解核心操作。
一、创建虚拟环境
# 进入项目目录
cd my_project
# 创建虚拟环境(venv 是环境名,可自定义)
python -m venv venv
执行后,会生成一个 venv/ 文件夹,里面包含独立的 Python 解释器和 pip。
二、激活虚拟环境
激活后,终端前缀会显示环境名称,python 和 pip 指向环境内的版本。
Windows (cmd)
venv\Scripts\activate
Windows (PowerShell)
venv\Scripts\Activate.ps1
如果遇到执行策略错误,可先运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
macOS / Linux
source venv/bin/activate
激活成功后,命令行提示符前会出现 (venv)。
三、安装包(在激活的环境下)
# 安装具体包
pip install requests
# 安装指定版本
pip install flask==2.3.2
# 从 requirements.txt 批量安装
pip install -r requirements.txt
四、记录依赖(生成 requirements.txt)
pip freeze > requirements.txt
这个文件记录了当前环境中所有包的精确版本,便于在其他环境(如服务器、同事电脑)中重现相同环境。
五、退出虚拟环境
deactivate
之后命令提示符恢复正常。
六、删除虚拟环境
直接删除虚拟环境文件夹即可:
# Windows / macOS / Linux 通用
rm -rf venv
七、核心操作速查表
| 操作 | 命令(Windows cmd) | 命令(macOS/Linux) |
|---|---|---|
| 创建环境 | python -m venv venv |
同左 |
| 激活环境 | venv\Scripts\activate |
source venv/bin/activate |
| 退出环境 | deactivate |
deactivate |
| 安装包 | pip install <package> |
同左 |
| 导出依赖 | pip freeze > requirements.txt |
同左 |
| 根据依赖安装 | pip install -r requirements.txt |
同左 |
| 删除环境 | rmdir /s venv |
rm -rf venv |
这两个命令是 Python 虚拟环境的核心操作,分别负责创建和激活虚拟环境。下面详细解释它们。
一、python -m venv venv
作用
创建一个新的虚拟环境。它会在当前目录下生成一个名为 venv 的文件夹,里面包含了一套独立、隔离的 Python 运行环境。
拆解说明
| 部分 | 含义 |
|---|---|
python |
当前系统中使用的 Python 解释器(可能是 python3,取决于系统别名)。 |
-m |
module 的缩写,表示运行一个 Python 模块作为脚本(而不是执行一个 .py 文件)。 |
venv |
Python 标准库中的 venv 模块,专门用于创建虚拟环境。 |
最后一个 venv |
目标目录名,即虚拟环境的存放路径。你可以改成任何名字,比如 .venv、myenv 等。 |
执行后发生了什么?
- 在当前目录下创建一个名为
venv的文件夹。 - 在
venv文件夹内复制或链接一个独立的 Python 解释器(具体方式取决于操作系统和 Python 版本)。 - 创建独立的
site-packages目录,将来用pip安装的第三方包都会放在这里。 - 生成激活脚本(Windows 下在
venv\Scripts\,Linux/macOS 下在venv/bin/)。
常用变体
- 指定 Python 版本:
python3.11 -m venv venv(如果系统安装了多个 Python 版本) - 创建时不继承全局已安装的包:
--without-pip(不会自动安装pip,极少用)
二、venv\Scripts\activate
作用
激活虚拟环境。运行这个脚本后,当前的命令行会话(shell)会切换到虚拟环境,后续的 python 和 pip 命令都会使用虚拟环境中的解释器和包,而不是全局的。
拆解说明
venv\Scripts\:虚拟环境目录下的Scripts文件夹(Windows 特有命名,Linux/macOS 下是venv/bin/)。activate:没有扩展名,但实际是一个可执行脚本(Windows 批处理脚本activate.bat或 PowerShell 脚本Activate.ps1)。
激活后发生了什么?
- 修改环境变量
PATH:将venv\Scripts添加到路径的最前面,这样系统会优先找到虚拟环境中的python.exe和pip.exe。 - 设置
VIRTUAL_ENV环境变量,指向虚拟环境的根目录,供其他工具识别。 - 命令行提示符通常会增加
(venv)前缀,提醒你当前处于虚拟环境中。
激活脚本的变体
| 操作系统 | Shell | 命令 |
|---|---|---|
| Windows | cmd | venv\Scripts\activate.bat 或直接 venv\Scripts\activate(会调用 .bat) |
| Windows | PowerShell | venv\Scripts\Activate.ps1(可能需要先执行 Set-ExecutionPolicy RemoteSigned) |
| Linux/macOS | bash/zsh | source venv/bin/activate |
退出虚拟环境
在激活的环境中执行 deactivate 即可退出,恢复使用全局环境。
三、为什么需要这两步?
- 创建(
python -m venv venv)是一次性操作,为项目搭建隔离环境。 - 激活(
activate)是每次打开新终端时需要做的,告诉当前终端使用哪个环境。
两者缺一不可:只创建不激活,你仍然在使用全局环境;只激活但之前没有创建,激活脚本不存在。
四、常见问题与注意事项
Q:为什么在 Windows 上直接输入 venv\Scripts\activate 就能工作?
A:Windows 命令提示符(cmd)会识别 activate 为 activate.bat 并执行它,.bat 扩展名可以省略。
Q:激活后运行 python,怎么确认用的是虚拟环境里的?
A:运行 where python(Windows)或 which python(Linux/macOS),看路径是否指向 venv 目录下。
Q:每次进入项目都要激活吗?
A:是的,每个终端会话需要单独激活。你也可以在 VS Code 等 IDE 中配置默认解释器为虚拟环境中的 python.exe,这样终端打开时会自动激活。
Q:虚拟环境创建后,可以移动文件夹位置吗?
A:不建议。因为激活脚本中硬编码了绝对路径。如果必须移动,需要修改脚本中的路径变量,或删除后重新创建。
五、完整工作流示例
# 1. 创建项目目录
mkdir myproject
cd myproject
# 2. 创建虚拟环境
python -m venv venv
# 3. 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/macOS:
source venv/bin/activate
# 4. 安装依赖(现在会装到 venv 中)
pip install fastapi
# 5. 运行 Python 脚本(使用虚拟环境的解释器)
python main.py
# 6. 退出虚拟环境
deactivate
八、最佳实践提醒
- 虚拟环境放在项目根目录,通常命名为
venv、.venv或env,并添加到.gitignore(不提交到版本库)。 - 每次开发新项目,先创建新虚拟环境,避免污染全局 Python。
- 不要手动修改
venv/内的文件,只用pip管理包。 - 使用 Python 3 的
venv,不要再使用过时的virtualenv(除非需要 Python 2 兼容)。 - IDE 集成:VSCode、PyCharm 等能自动识别虚拟环境,选择
venv/bin/python作为解释器即可。
掌握以上操作,你就能轻松管理任何 Python 项目的依赖环境了。下一步可以学习 pipenv 或 poetry 等更高级的依赖管理工具,但 venv + requirements.txt 足够应对绝大多数场景。
总结
| 命令 | 作用 | 执行频率 |
|---|---|---|
python -m venv venv |
创建虚拟环境(生成独立文件夹) | 每个项目一次 |
venv\Scripts\activate |
激活虚拟环境(修改 PATH 和环境变量) | 每次打开新终端时需要 |
理解这两个命令,就掌握了 Python 项目环境隔离的基础。这在团队协作、项目部署以及避免依赖冲突中至关重要。
更多推荐


所有评论(0)