在刚开始接触 Python 时,我们通常习惯直接用 pip install 把所有需要的库都安装到系统的全局环境中。但随着项目越来越多,你迟早会遇到这样一个棘手的问题:版本冲突。
假设你正在编写一个网络爬虫脚本,依赖某个特定旧版本的网络请求库;同时,你又在另一个文件夹里跑深度学习模型,需要最新版本的核心计算库。如果这两个库的底层依赖发生冲突,你的全局环境就会陷入混乱,导致代码昨天还能跑,今天就报错。
为了解决这个问题,我们需要引入 Python 虚拟环境(Virtual Environment)。
简单来说,虚拟环境就像是给每个 Python 项目建了一个独立的”沙盒”。在这个沙盒里,有独立的 Python 解释器和独立的第三方库文件夹。各个沙盒之间互不干扰,也绝不污染你电脑操作系统的全局 Python 环境。
| 工具 | 适用场景 | 特点 |
|---|---|---|
venv |
通用 Python 开发(推荐) | 官方内置,零安装,轻量 |
conda |
科学计算 / 机器学习 | 可管理非 Python 依赖(如 CUDA),但较重 |
virtualenv |
需要兼容 Python 2 的老项目 | venv 的前身,功能更多 |
uv |
追求极速的现代项目 | Rust 编写,比 pip 快 10-100 倍,2024 年新秀 |
本文重点介绍 venv,它是 Python 3.3+ 内置的标准方案,对于绝大多数项目来说完全够用。
首先,打开终端并进入你的项目根目录。然后运行以下命令:
# Windows / macOS / Linux 通用
python -m venv .venv
小贴士:这里的
.venv是虚拟环境文件夹的名字。强烈建议以.开头(如.venv),这样它在大多数编辑器中会被隐藏,不会干扰你的项目文件视图。
创建好后,你需要”走入”这个沙盒。不同操作系统的激活命令有所不同:
Windows (Command Prompt):
.venv\Scripts\activate.bat
Windows (PowerShell):
.venv\Scripts\Activate.ps1
macOS / Linux:
source .venv/bin/activate
激活成功后,你的命令行提示符最前方通常会出现 (.venv) 的字样,这就说明你现在所有的 python 和 pip 操作都只会在这个沙盒里进行了。
PowerShell 执行策略问题: 如果提示”无法加载文件,因为在此系统上禁止运行脚本”,以管理员身份运行
Set-ExecutionPolicy RemoteSigned即可。
现在你可以放心大胆地安装项目所需的库了:
pip install requests numpy
当你完成了一阶段的开发,准备将代码分享给别人,或者部署到其他电脑上时,你可以一键导出当前环境的所有依赖清单:
pip freeze > requirements.txt
pip listvspip freeze:pip list以可读格式展示已安装的包;pip freeze输出包名==版本号格式,专门用于生成requirements.txt。
别人拿到你的项目后,只需要创建一个新的虚拟环境,然后运行:
pip install -r requirements.txt
就可以完美复现你当时的开发环境。
当你在这个项目的开发告一段落,想要切换到其他项目时,只需要执行:
deactivate
命令行前方的 (.venv) 标志就会消失,你就退出了沙盒,回到了系统的全局环境中。
永远不要把虚拟环境提交到 Git 仓库! 虚拟环境文件夹(.venv)里面包含了大量的可执行文件和库,体积非常大,且通常与特定的操作系统绑定。请务必在你的 .gitignore 文件中添加:
.venv/
__pycache__/
*.pyc
为每一个新项目创建一个独立的虚拟环境。 不要为了省事让多个项目共用一个虚拟环境,那和使用全局环境没有本质区别。
VS Code 会自动检测项目目录下的 .venv 文件夹。打开项目后,按 Ctrl+Shift+P 输入 “Python: Select Interpreter”,选择 .venv 中的 Python 解释器即可。之后在 VS Code 内置终端中打开新终端,虚拟环境会自动激活。
掌握虚拟环境是每个 Python 开发者进阶的必经之路。它不仅能让你的电脑保持整洁,更是保证项目可复现性、提高团队协作效率的基础。下次新建项目文件夹时,记得敲下那句 python -m venv .venv!
Happy Coding!
提示:鼠标移动会产生拖尾并影响周围粒子;按住 Alt 可切换吸引(Alt)/排斥(默认)效果。