装包把全局环境搞乱,多半是没建虚拟环境。Python 虚拟环境的作用就一句话:给每个项目一套独立的包目录,A 项目升级库不会影响 B 项目。下面按「谁适合用哪种」把 5 种主流方案摆开,附创建命令和踩坑点。
结论先行:Python 虚拟环境五选一怎么定
- 只写脚本、做作业、跑小工具:用
venv,Python 自带,零安装。
- 做数据分析、要装 CUDA 或编译好的数学库:用
conda,从 Miniconda 起步。
- 项目要发版、要给别人 pip 安装:用
poetry,把依赖版本锁死。
- 手上项目多、受不了每次装包干等:用
uv。
- 维护老项目、Python 版本低于 3.3:用
virtualenv。
拿不准就先上 venv,后面不够用再换,迁 requirements.txt 的成本并不高。
五种 Python 虚拟环境工具,各自适合谁
venv:不用装,够用
- 在项目根目录执行
python -m venv .venv。
- 激活:Windows 用
.venvScriptsactivate,macOS 或 Linux 用source .venv/bin/activate。
- 命令行前面出现
(.venv)就是成功了,之后pip install都装进这个目录。
好处是零安装,Python 3.3 以后自带;限制是只能管 Python 包,装不了系统级依赖,而且每开一个新终端都要重新激活一次。
conda:要装非 Python 的东西时用
数据科学场景常要装 CUDA、MKL 这类二进制依赖,pip 经常装不动,conda 能一起管。
- 装 Miniconda 就够,完整版 Anaconda 体积大很多。
- 建环境:
conda create -n myenv python=3.11;激活:conda activate myenv。
- 限制:环境目录占空间多,切环境比 venv 慢;纯 Web 项目没必要上。
poetry:依赖要锁死、项目要发版
pyproject.toml 写依赖,poetry.lock 锁版本,别人 clone 下来装出来的包和你一致。
poetry new 项目名建骨架,poetry add requests加依赖,poetry install还原环境。
- 适合团队协作和准备发到 PyPI 的项目。
- 限制:学习成本比 venv 高,一次性小脚本用不上。
uv:装包快、项目多的时候舒服
Rust 写的包管理工具,能直接读 requirements.txt 和 pyproject.toml。
uv venv建环境,uv pip install -r requirements.txt装依赖。
- 适合本地同时开好几个项目、每次装依赖都要等半天的情况。
- 限制:生态比 pip 新,个别老包出问题时退回 pip 再试一次。
virtualenv:老版本 Python 的补位
Python 3.3 以前没有 venv,这类老项目先 pip install virtualenv,再 virtualenv .venv 建环境。新项目没必要专门选它。

按项目类型挑:3 个判断问题
- 要不要装非 Python 的依赖(CUDA、编译库)?要就用 conda;不要就往下走。
- 项目会给别人用、要锁版本吗?要就选 poetry 或 uv;不要就选 venv。
- Python 版本低于 3.3 吗?是就用 virtualenv;不是就 venv 或 uv。
三个问题都答「不需要」,用 venv 就行,别为了工具而工具。
避坑提醒:4 个容易踩的坑
- 建了环境却忘记激活,装完发现全局多了一堆包。用
which python(macOS、Linux)或where python(Windows)看路径里有没有.venv。
- 把
.venv提交进 Git,几百 MB 的包被打进仓库。在.gitignore里加一行.venv/。
- 项目文件夹改名或搬家后环境失灵,原因是 venv 里记着绝对路径。删掉重建最快。
- 同一个环境里 conda 和 pip 混着装,容易撞依赖。一个环境里统一用一种装包方式。
常见问题(FAQ)
每个项目都要单独建虚拟环境吗?
建议都建。判断标准很简单:只要这个项目要 pip install 第三方包,就给它单独一个环境,省得两个项目抢同一个库的版本。
venv 和 virtualenv 有什么区别?
venv 是 Python 标准库自带,virtualenv 是第三方包,支持更老的 Python 版本,建环境的速度也更快一些。新项目用 venv 足够。
直接把 .venv 文件夹删掉会有影响吗?
不影响代码,只丢环境。删掉后重新建一个 Python 虚拟环境、再按 requirements.txt 装一遍依赖就能还原,前提是这个文件你一直维护着。
requirements.txt 和 lock 文件有什么不一样?
前者通常只写包名和版本范围,后者记录的是实际装上的精确版本和整棵依赖树。要严格复现环境,lock 文件更可靠。
最后更新:2026-10-21(工具界面、价格与政策可能调整,请以官方页面为准)。