Python虚拟环境怎么创建和激活:venv基础教程
venv 模块,无需额外安装任何第三方工具即可创建轻量级、互相隔离的虚拟环境。只需执行 python -m venv <环境目录> 即可完成创建,再通过当前系统对应的激活脚本使环境生效,即可让每个项目拥有独立的第三方库目录和解释器上下文,彻底杜绝多项目依赖版本冲突。
一、为什么需要 Python 虚拟环境与 venv
在没有使用虚拟环境时,通过 pip install 安装的所有第三方库都会存放在全局 Python 环境的 site-packages 目录中。当不同项目依赖同一库的不同版本(例如项目 A 依赖 Django 3.2,而项目 B 依赖 Django 4.2)时,全局安装会导致版本覆盖和依赖冲突,甚至可能破坏系统自带的 Python 工具链。
venv 通过在项目目录下创建一个包含轻量级独立运行环境的文件夹来解决这一问题。虚拟环境内部拥有独立的 site-packages 和解释器调用入口,同时通过配置文件指向宿主 Python 安装目录,既不占用庞大的系统磁盘空间,又保证了运行环境的绝对纯净。
二、创建虚拟环境的前置确认与命令执行
在创建虚拟环境之前,首先需要确认当前系统中已经安装了 Python 3 且版本在 3.3 及以上。可以在终端或命令提示符中运行版本检查命令:
python --version
# 在 macOS 或部分 Linux 发行版中可能需要使用 python3
python3 --version
1. 执行创建命令
进入项目根目录下,使用 -m venv 参数调用 Python 内置的虚拟环境模块,并在其后指定虚拟环境的保存目录。推荐在项目根目录下使用 .venv 作为目录名(带有圆点前缀可将其作为隐藏目录,方便 Git 忽略管理):
# 进入你的工作项目目录
cd /path/to/my_project
# 执行创建命令(以 .venv 为环境目录名称)
python3 -m venv .venv
python3 命令未配置,请直接使用 python -m venv .venv。这里的 .venv 可以替换为任何合法文件夹名,如 myenv 或 env,但社区最通用的最佳实践是统一命名为 .venv。
2. 创建生成的核心目录结构
命令执行完毕后,当前目录下会生成一个名为 .venv 的文件夹,内部结构因操作系统略有不同,但职责完全对应:
- pyvenv.cfg:核心配置文件,记录基础 Python 解释器的真实路径(
home)以及是否包含全局系统包(include-system-site-packages = false)。 - bin/(macOS/Linux)或 Scripts/(Windows):存放激活与退出脚本(如
activate、activate.bat、Activate.ps1)以及指向 Python 主程序的快捷调用入口。 - lib/pythonX.X/site-packages/(Linux/macOS)或 Lib/site-packages/(Windows):当前虚拟环境专用的第三方依赖库安装目录。
三、不同操作系统下的激活方法与验证
仅仅创建文件夹并不会自动切换运行环境,必须在当前打开的终端中执行激活脚本。不同的操作系统和命令行 Shell 需要使用对应的命令。
1. macOS 与 Linux (Bash / Zsh)
在终端中运行 source 命令来加载环境配置:
# 使用 source 命令加载激活脚本
source .venv/bin/activate
执行后,终端提示符最左侧会出现 (.venv) 标记。
2. Windows Command Prompt (CMD)
如果使用传统的 CMD 命令行窗口,直接输入脚本路径并回车:
# 在 CMD 中直接执行 bat 脚本
.venv\Scripts\activate.bat
3. Windows PowerShell
在 PowerShell 中,执行对应扩展名为 .ps1 的脚本:
# 在 PowerShell 中执行
.venv\Scripts\Activate.ps1
Activate.ps1 时遇到 File ... cannot be loaded because running scripts is disabled on this system 报错,只需在当前 PowerShell 窗口中运行以下命令(仅对当前终端会话生效,无需管理员提权):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
设置后再重新执行
.venv\Scripts\Activate.ps1 即可成功激活。
4. 验证虚拟环境是否已正确激活
观察提示符前缀是最直观的方式,但在编写自动化脚本或确认为解释器实际调用路径时,可通过以下命令进行明确验证:
# 检查当前 python 指向
which python
# Windows 下使用 where
# where python
# 检查当前运行环境的 prefix 指向
python -c "import sys; print(sys.prefix)"
/Users/username/my_project/.venv
如果输出路径明确指向项目目录下的 .venv,说明虚拟环境已经完全生效。
四、虚拟环境的日常使用:安装、导出与退出
激活虚拟环境后,所有常规命令的语义都会自动绑定到该独立空间中。
1. 在虚拟环境中安装与管理依赖
在 (.venv) 处于激活状态时,直接使用 pip install 即可将包安装到 .venv 内部的 site-packages 目录:
# 安装项目所需的依赖包
pip install requests flask
# 查看当前环境中安装的包列表及版本
pip list
---------- -------
Flask 3.0.0
pip 23.2.1
requests 2.31.0
2. 导出与共享依赖清单
虚拟环境文件夹本身包含大量特定于本机的路径符号,绝对不能提交到代码仓库(如 Git)中。通常将 .venv 添加至 .gitignore 文件,并通过依赖清单进行版本共享:
# 导出当前虚拟环境依赖清单
pip freeze > requirements.txt
# 在新机器或新成员拉取代码后,创建新虚拟环境并一键恢复安装
pip install -r requirements.txt
3. 退出虚拟环境
当需要回到系统默认环境或切换至其他项目时,直接在终端中运行 deactivate:
# 退出当前激活的虚拟环境
deactivate
执行后,终端前端的 (.venv) 标记会立即消失,环境变量 PATH 自动还原为激活前的状态。
4. 彻底删除或重建虚拟环境
venv 没有任何卸载残留。如果环境损坏或需要彻底清空依赖,只需退出环境后直接删除 .venv 文件夹即可:
# macOS / Linux 下删除
rm -rf .venv
# Windows 下删除(PowerShell / CMD)
# rmdir /s /q .venv
五、全生命周期总结与常见问题排查
为了帮助建立系统性的操作直觉,下表总结了 venv 在日常研发流程中的关键节点与速查指令:
| 阶段 | 目标 | macOS / Linux 命令 | Windows (CMD / PowerShell) 命令 |
|---|---|---|---|
| 1. 创建 | 在项目内初始化独立沙盒 | python3 -m venv .venv |
python -m venv .venv |
| 2. 激活 | 将终端会话切换进沙盒 | source .venv/bin/activate |
.venv\Scripts\activate.bat (CMD).venv\Scripts\Activate.ps1 (PS) |
| 3. 验证 | 核查解释器真实调用路径 | which python |
where python |
| 4. 管理 | 隔离安装或冻结依赖 | pip install <库名> / pip freeze > requirements.txt |
|
| 5. 退出 | 恢复终端环境变量 | deactivate |
|
| 6. 销毁 | 物理清除虚拟环境 | rm -rf .venv |
rmdir /s /q .venv |
常见问题与注意事项
-
直接移动项目文件夹导致虚拟环境失效:
在创建
.venv时,pyvenv.cfg和激活脚本内写入了当前系统路径的绝对路径。如果对项目文件夹重命名或移动到其他目录,会导致python命令找不到原路径。解决方法非常简单:删除旧的.venv文件夹,在新的位置重新运行python -m venv .venv即可。 -
Linux 最小化安装缺少 venv 包:
在 Ubuntu/Debian 等部分 Linux 发行版的精简镜像中,Python 虽已安装,但标准库被拆分。若运行出现
No module named venv报错,只需通过系统包管理器安装对应版本即可:sudo apt update && sudo apt install python3-venv -
激活后 pip 安装依然提示权限不足:
如果激活环境后运行
pip install仍然提示没有权限写入系统目录,通常说明激活未真正成功,当前仍在调用全局解释器。请立即运行which pip(或where pip)核实路径;务必确认输出路径位于当前项目的.venv目录中。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













