Python 虚拟环境实战:venv与 conda到底该用哪个
【摘要】 Python 项目最怕"在我机器上能跑"。本文对比 venv 和 conda 两种虚拟环境方案,给出选型建议和常用命令,帮你彻底告别依赖冲突。
一、为什么一定要虚拟环境
Python 的包是全局安装的。如果你 A 项目要 requests==2.25,B 项目要 requests==2.31,装一起就冲突,最后谁都跑不起来。
虚拟环境就是给每个项目开一个独立的"依赖小房间",互不干扰。这是 Python 开发的基本功,没有例外。
二、venv:Python 自带的轻量方案
venv 是 Python 3.3+ 内置的,不用额外装,最轻量。
# 在项目目录创建名为 .venv 的虚拟环境
python -m venv .venv
# 激活(Linux / macOS)
source .venv/bin/activate
# 激活(Windows,PowerShell)
.venv\Scripts\Activate.ps1
# 激活后,pip 装的包只进这个环境
pip install requests==2.31.0
# 退出环境
deactivate
激活后命令行前面会出现 (.venv) 前缀,提醒你"现在在这个房间里"。
三、conda:不止 Python 的环境管理器
conda(来自 Anaconda / Miniconda)更强的地方在于:它能管非 Python 的依赖,比如 CUDA、C++ 库、R 语言包。做数据科学、机器学习的同学基本离不开它。
# 创建环境并指定 Python 版本
conda create -n myenv python=3.11
# 激活
conda activate myenv
# 安装(conda 渠道没有的,也可以走 pip)
conda install numpy
pip install some-pure-python-lib
# 退出
conda deactivate
# 导出环境,方便别人复现
conda env export > environment.yml
四、怎么选:一张表说清
| 维度 | venv | conda |
|---|---|---|
| 是否需额外安装 | 否(Python 自带) | 是(装 Miniconda/Anaconda) |
| 管 Python 包 | ✅ | ✅ |
| 管非 Python 依赖 | ❌ | ✅(CUDA、C 库等) |
| 体积 / 启动 | 轻 | 重一些 |
| 适合人群 | Web 开发、脚本、普通后端 | 数据科学、ML、要混编语言 |
| 环境文件 | requirements.txt |
environment.yml |
我的经验法则:
- 写 Web 服务、小工具、后端接口 → venv 足够,别折腾 conda,简单干净。
- 搞机器学习、要装 PyTorch 且依赖特定 CUDA → conda 更省心,它帮你把底层依赖一起对齐。
- 团队项目 → 记得把环境文件(
requirements.txt或environment.yml)提交进 Git,别人pip install -r/conda env create一键复现。
五、新手常踩的坑
- 忘了激活就装包:装完发现全局还是项目都跑不了,多半是没
activate,包装到了全局。 - Windows 激活失败:PowerShell 默认禁止脚本执行,报"无法加载,因为禁止运行脚本",需要先
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned,或用cmd里的.\.venv\Scripts\activate.bat。 - 把环境目录提交了 Git:
.venv/或 conda 环境目录别传仓库,用.gitignore忽略,只传requirements.txt。 - conda 里又用 pip 装了一堆:可以混用,但建议 conda 装不下的才用 pip,且先 conda 后 pip,避免依赖树打架。
六、小结
虚拟环境不是可选项,是必选项。普通开发用 venv 足够轻快;数据/ML 场景用 conda 省去底层依赖的麻烦。记住两条:每个项目一个环境 + 环境文件进 Git,基本上就不会再遇到"在我机器上能跑"的尴尬了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)