Python 虚拟环境入门:用 venv 隔离项目依赖的完整指南
作为一名 Python 开发者,你是否遇到过这些尴尬的场景:在机器 A 上跑得好好的项目,到了机器 B 上就报 ImportError;想升级某个库的版本,却担心影响另一个项目的运行;刚接手一个老项目,pip list 里躺着几十个不知道谁装的包。这些问题的根源,往往是所有项目共用同一个全局 Python 环境。解决办法并不复杂:给每个项目创建一个独立的虚拟环境。
一、什么是虚拟环境
虚拟环境(virtual environment)是 Python 官方提供的隔离机制。简单来说,它在你指定的目录下复制出一套独立的 Python 解释器和包管理工具,让每个项目拥有自己的沙盒。
在虚拟环境里:第一,pip 安装的包只属于当前项目,不会污染全局环境;第二,不同项目可以使用同一个库的不同版本,互不干扰;第三,部署时通过 requirements.txt 精确复刻依赖,保证在我机器上能跑,也能在服务器上跑起来。
Python 3.3 起,标准库自带了 venv 模块,无需安装第三方工具,开箱即用。
二、创建第一个虚拟环境
假设你的项目目录是 ~/demo,执行:
cd ~/demo
python -m venv .venv
这条命令会在项目目录下生成一个 .venv 文件夹。常见做法是把虚拟环境目录命名为 .venv,并在 .gitignore 里忽略它。记住:虚拟环境目录不应该提交到代码仓库。
三、激活与退出
创建完成后,还需要激活才能真正生效。
Linux / macOS 下执行:source .venv/bin/activate
Windows(CMD)下执行:.venv\Scripts\activate.bat
Windows(PowerShell)下执行:.venv\Scripts\Activate.ps1
激活成功后,命令行提示符前面会出现 (.venv) 字样。不再需要时执行 deactivate 即可退出。
一个常见坑:激活脚本修改的是当前 shell 的 PATH 环境变量,所以激活只对当前终端窗口有效,新开一个终端记得重新激活。
四、在虚拟环境中管理依赖
激活后,pip 安装的包只会进入虚拟环境:
pip install requests==2.31.0
pip freeze > requirements.txt
requirements.txt 是团队协作的契约。新人接手项目只需三步就能复刻环境:创建虚拟环境、激活、pip install -r requirements.txt。建议养成习惯:每次增删依赖后立刻重新 freeze,保持清单与实际一致。
五、几个实用技巧
第一,升级 pip 自身:虚拟环境自带的 pip 版本可能较旧,激活后先跑 python -m pip install --upgrade pip。第二,快速确认当前环境:执行 which python(Windows 用 where python),确认指向的是虚拟环境下的解释器。第三,IDE 集成:VS Code、PyCharm 都支持把项目解释器切换到虚拟环境,打开项目时一般会自动提示。第四,团队内统一命名规范,并在 .gitignore 里忽略虚拟环境目录,避免误提交几百兆的依赖文件。
六、venv 之外的选择
除了标准库 venv,社区还有 virtualenv、conda、pipenv、poetry 等方案。virtualenv 是 venv 的前辈,功能略多;conda 自带二进制包管理,适合数据科学场景,但体积较大;poetry 和 pipenv 把依赖管理和打包发布做成一体化工作流,适合长期维护的库项目。对于绝大多数日常开发,标准库 venv 轻量、无依赖,是最稳妥的起点。
写在最后
依赖冲突的本质,是共享状态带来的不确定性。虚拟环境用最小的成本,把每个项目的依赖变成了确定性的快照。今天花十分钟给项目配上 venv,明天你就能少花两小时排查为什么在我电脑上是好的这类玄学问题。不妨现在就打开终端,为手头的项目创建一个专属环境试试。
- 点赞
- 收藏
- 关注作者
评论(0)