1. 为什么我劝你别再往 base 环境里装包了
刚学 Python 那阵子,我最常干的一件事就是打开终端,pip install一路装到底。requests、numpy、pandas、opencv、pytorch 全塞进同一个环境,当时觉得挺爽,直到某天跑一个老项目,发现 numpy 版本被新装的包顶掉了,代码直接报AttributeError,那一刻我才明白:虚拟环境不是可选项,是必修课。
这篇内容就是把我这些年反复折腾出来的 vscode + anaconda 搭建 Python 虚拟环境的完整流程写清楚。它解决的核心问题很具体:让每个项目拥有独立的依赖空间,互不干扰,同时能在 vscode 里一键切换、断点调试、自动补全。适合刚入门 Python 的新手,也适合被环境冲突折磨过的老手——尤其是那些同时要跑爬虫、数据分析、深度学习好几类项目的人。
我下面讲的每一步都是实测能跑通的,包括国内镜像源配置、conda 与 pip 的取舍、vscode 解释器识别不到环境的坑,以及虚拟环境迁移这种进阶操作。你照着做,基本能避开我当年踩过的 90% 的坑。
2. 环境搭建前的整体思路与选型考量
2.1 为什么是 Anaconda 而不是纯 Python + venv
很多人会问:Python 自带的venv不也能建虚拟环境吗,为什么还要装一个几个 G 的 Anaconda?这个问题我认真对比过,结论是看你的使用场景。
纯venv的优势是轻量,一个环境几十兆,创建快。但它只管 Python 包,管不了非 Python 的依赖。而 Anaconda 的 conda 是个跨语言的包管理器,它能装 Python 包,也能装 CUDA、cuDNN、MKL 这类底层库。你要跑 pytorch 或者做科学计算,conda 能帮你把显卡驱动之外的依赖一次性配齐,这是 venv 做不到的。
另一个现实原因是国内网络。conda 可以配置国内镜像源,下载大包(比如 pytorch 的 GPU 版本动辄一两个 G)时速度差距非常明显。pip 虽然也能换源,但遇到需要编译的包,conda 直接给编译好的二进制,省去一堆编译报错。
所以我的建议是:做数据分析、机器学习、科学计算,用 Anaconda;做纯 Web 开发、轻量脚本,venv 足够。这篇内容以 Anaconda 为主线,因为它覆盖的场景更广,新手装一次能管很久。
2.2 conda 环境和 pip 环境到底啥关系
这是新手最容易绕晕的地方,我用一句话说清楚:conda 环境是一个独立的文件夹,里面有自己的 Python 解释器和 site-packages 目录;pip 是装在这个环境里的一个工具,往这个环境的 site-packages 里塞包。
也就是说,你激活了某个 conda 环境之后,再用 pip 装包,包是装进这个环境的,不会污染别的环境。但有个坑:如果你没激活任何环境,直接pip install,那包就装到 base 环境或者系统 Python 里去了。所以永远先conda activate 环境名,再 pip 装包,这个顺序不能乱。
还有一点,conda 和 pip 装的包偶尔会打架,比如同一个包两边都装了不同版本。我的经验是:能用 conda 装的优先用 conda,conda 里没有的再用 pip。装之前可以先conda search 包名看看有没有。
2.3 vscode 在整个链路里扮演什么角色
Anaconda 负责“造环境”,vscode 负责“用环境”。它俩是分工关系,不是替代关系。
vscode 本身只是个编辑器,它通过 Python 插件去调用你指定的那个解释器。你在 vscode 里选哪个环境的 python.exe,代码就跑在哪个环境里,补全、调试、lint 也都跟着走。所以配置的核心动作就一个:让 vscode 找到并选中你 conda 建好的那个环境。
理解了这三者的关系,后面的操作就都是顺理成章的。下面进入实操。
3. Anaconda 安装与国内镜像源配置实操
3.1 下载与安装的关键选项
Anaconda 官网下载页面直接搜“anaconda download”就能找到,选对应系统的安装包。Windows 用户下.exe,macOS 下.pkg,Linux 下.sh。文件比较大,几百兆到一两个 G,耐心等。
安装过程中有几个选项必须注意,我按 Windows 安装器举例:
- Install for: Just Me,别选 All Users。选 All Users 会装到
C:\ProgramData下,后面权限问题一堆,尤其是你以后想手动改环境目录的时候。 - 安装路径不要有中文和空格。默认是
C:\Users\你的用户名\anaconda3,这个就挺好。我见过有人装到D:\我的软件\anaconda,结果 conda 各种路径报错,排查半天。 - Add Anaconda3 to my PATH environment variable:这个选项官方默认不勾,理由是怕和系统里其他 Python 冲突。我的建议是先不勾,装完之后用 Anaconda Prompt 来操作,避免 PATH 混乱。等你熟悉了再考虑手动加。
- Register Anaconda3 as my default Python:可以勾,方便其他工具识别。
macOS 和 Linux 用户装完之后,需要手动初始化一下 shell,运行conda init或者按安装提示把 conda 加到.bashrc/.zshrc里。装完关掉终端重开,输入conda --version能看到版本号就说明成了。
3.2 配置国内镜像源,下载速度起飞
装完第一件事就是换源,不然conda install能慢到你怀疑人生。我常用的是清华源,配置命令如下:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes配置完可以用conda config --show channels查看当前生效的源。如果哪天想恢复默认,把--add换成--remove逐条删掉,或者直接删掉用户目录下的.condarc文件。
注意:镜像源不是越多越好,加太多会导致 conda 解析依赖时反复查询,反而变慢。一般 main + conda-forge 两个就够用了。
pip 的源也顺手配一下,在用户目录建一个pip文件夹,里面放pip.ini(Windows)或pip.conf(macOS/Linux),内容:
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn这样以后 pip 装包也是走国内源,速度稳定。
3.3 验证安装是否成功
打开 Anaconda Prompt(Windows)或终端(macOS/Linux),依次执行:
conda --version python --version conda info --envs第一条显示 conda 版本,第二条显示 Python 版本(Anaconda 自带一个 base 环境的 Python),第三条列出所有环境,默认只有一个 base。三条都正常,说明安装没问题。
如果conda命令找不到,多半是 PATH 没配好。Windows 用户用开始菜单里的 Anaconda Prompt 就行,它自带环境变量。macOS/Linux 用户检查一下 shell 配置文件里有没有 conda 的初始化块。
4. 创建与管理 Python 虚拟环境
4.1 创建环境时 Python 版本怎么选
创建环境的命令是:
conda create -n 环境名 python=版本号比如conda create -n py310 python=3.10。这里的版本号选择有讲究,不是越新越好。
我的经验是:看你的核心依赖支持到哪个版本。比如你要装 pytorch,就去 pytorch 官网看它当前支持的 Python 版本范围;你要用某个老爬虫框架,可能只支持到 3.8。盲目上最新版 Python,很可能遇到某个包还没出对应 wheel,只能源码编译,那过程相当痛苦。
给几个常见场景的参考:
| 场景 | 推荐 Python 版本 | 理由 |
|---|---|---|
| 深度学习(pytorch/tensorflow) | 3.9 - 3.11 | 主流框架支持完善,wheel 齐全 |
| 数据分析(pandas/numpy) | 3.10 - 3.12 | 新版本性能优化明显 |
| 爬虫(scrapy/requests) | 3.9 - 3.11 | 生态稳定,第三方库兼容好 |
| 老项目维护 | 按项目要求 | 别乱升级,跟着原环境走 |
创建时还可以一次性指定多个包,比如conda create -n myenv python=3.10 numpy pandas,这样建环境的同时就把常用包装好,省一步。
4.2 激活、退出与查看环境
创建完环境,用conda activate 环境名激活。激活后命令行前面会出现(环境名)的提示,这时候你敲的 python、pip 都是这个环境的。
退出用conda deactivate。查看所有环境用conda info --envs或conda env list,带星号的就是当前激活的。
删除环境用conda remove -n 环境名 --all,这个操作不可逆,删之前确认一下里面没有你还需要的东西。我一般会先conda list -n 环境名看一眼装了啥,重要的包记下来再删。
实操心得:环境名别用中文,别用空格,用英文加下划线或者短横线。我见过用中文环境名的,激活时各种编码问题,纯属给自己找麻烦。
4.3 环境目录在哪,能不能挪
默认情况下,conda 环境都建在 Anaconda 安装目录下的envs文件夹里。Windows 一般是C:\Users\用户名\anaconda3\envs\环境名。
C 盘紧张的话,可以改环境目录。方法是在.condarc文件里加一行envs_dirs,指定到别的盘:
envs_dirs: - D:\conda_envs改完之后新建的环境就放到 D 盘了。但已经建好的环境不会自动挪,需要手动迁移或者重建。我一般建议重建,因为手动挪容易出路径问题,重建反而干净。
4.4 环境迁移的两种实用方案
换电脑或者要把环境给别人用的时候,迁移就派上用场了。有两种方式:
方式一:导出环境文件
conda env export > environment.yml这个文件记录了环境里所有包和版本。对方拿到后执行conda env create -f environment.yml就能复现。缺点是它会把 conda 和 pip 装的包都写进去,跨平台时可能因为平台特定的包导致失败。
方式二:只导出显式安装的包
conda list --explicit > spec-file.txt这个生成的是精确的下载链接,适合同平台迁移,速度快但跨平台不行。
我的建议是:跨平台用 environment.yml,同平台批量部署用 spec-file.txt。导出前先conda activate到目标环境,不然导的是 base。
5. vscode 配置 Python 环境全流程
5.1 安装 vscode 与必备插件
vscode 官网下载对应系统的安装包,一路下一步就行。装完第一件事是汉化,在扩展市场搜“Chinese”,装官方那个中文语言包,重启后界面就变中文了。
然后装 Python 相关插件,这几个是必装的:
- Python(微软官方):提供解释器选择、调试、运行、补全的核心功能。
- Pylance:微软的类型检查和智能补全引擎,比默认的 Jedi 强不少,装 Python 插件时会提示一起装。
- Jupyter:如果你用
.ipynb做数据分析,这个必须有。 - Black Formatter(可选):代码格式化,团队协作时统一风格用。
装插件的时候注意看发布者,认准 Microsoft,别装到山寨的。
5.2 让 vscode 识别 conda 环境
这是整个流程里最容易卡住的一步。装完 Python 插件后,按Ctrl+Shift+P(macOS 是Cmd+Shift+P)打开命令面板,输入“Python: Select Interpreter”,回车。
正常情况下,列表里会列出你所有的 conda 环境,每个环境后面跟着路径。选中你要的那个,vscode 左下角状态栏就会显示当前解释器。
如果列表里没有你的 conda 环境,八成是这几个原因:
- conda 没初始化。在终端跑一次
conda init,然后重启 vscode。 - vscode 是从图标启动的,没继承终端环境变量。解决办法是从已经激活 conda 的终端里用
code .命令启动 vscode。 - Python 插件版本太老。更新一下插件。
- 环境路径不在 conda 默认搜索范围。可以在设置里手动加
python.condaPath,指向你的 conda 可执行文件。
我遇到最多的是第二种。Windows 上从开始菜单点 vscode 图标,它拿不到 Anaconda Prompt 里的环境变量,自然找不到 conda。养成从终端code .启动的习惯,能省很多事。
5.3 配置 settings.json 让体验更顺
选中解释器后,建议在项目根目录建一个.vscode/settings.json,把项目相关的配置写进去,这样换电脑或者团队共享时配置跟着项目走。一个常用的模板:
{ "python.defaultInterpreterPath": "D:\\conda_envs\\myenv\\python.exe", "python.terminal.activateEnvironment": true, "python.linting.enabled": true, "python.linting.pylintEnabled": false, "python.linting.flake8Enabled": true, "python.formatting.provider": "black", "editor.formatOnSave": true, "files.autoSave": "afterDelay" }几个关键项解释一下:
python.defaultInterpreterPath:写死解释器路径,避免每次打开项目都要重选。python.terminal.activateEnvironment:打开终端时自动激活对应环境,省得手动conda activate。editor.formatOnSave:保存时自动格式化,配合 black 用,代码风格统一。
注意:路径里的反斜杠要写成双反斜杠
\\,这是 JSON 的转义要求,写单反斜杠会解析失败。
5.4 跑通第一个测试脚本
配置完别急着写项目,先建个test.py验证一下:
import sys print(sys.executable) print(sys.version) import numpy as np print(np.__version__)运行后看输出。sys.executable打印的路径应该是你选的那个 conda 环境的 python.exe,不是 base 也不是系统 Python。如果 numpy 能正常导入并打印版本,说明环境配置完全通了。
如果 numpy 导入报ModuleNotFoundError,说明这个环境里没装 numpy,回到终端conda activate 环境名然后conda install numpy装上即可。这一步能帮你确认 vscode 用的到底是不是你以为的那个环境。
6. 常见问题排查与避坑经验实录
6.1 解释器选不对、包找不到的排查思路
这是最高频的问题,我整理成一个速查表:
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 列表里没有 conda 环境 | conda 未初始化 / vscode 未继承环境变量 | conda init后重启,或从终端code .启动 |
| 选了环境但导入包失败 | 包装在别的环境 / 没装 | 终端激活该环境conda list确认,缺啥装啥 |
| 终端里 python 和 vscode 不一致 | 终端没自动激活环境 | 检查python.terminal.activateEnvironment设置 |
| 补全不工作 | Pylance 没装 / 解释器没选 | 装 Pylance,重选解释器 |
| 调试时找不到模块 | 调试配置里的环境不对 | 检查.vscode/launch.json的 python 路径 |
排查的核心思路就一条:确认 vscode 当前用的解释器路径,和你以为的那个环境路径是不是同一个。用sys.executable打印出来对比,一目了然。
6.2 conda 和 pip 混用的那些坑
前面提过 conda 和 pip 会打架,这里展开说几个具体的坑。
坑一:pip 装完 conda 不认。你用 pip 装了个包,conda list里能看到,但conda update的时候它不管这个包,因为不是 conda 装的。这本身不算错,但如果你之后用conda env export导出环境,pip 装的包会以 pip 段的形式记录,别人复现时可能出问题。
坑二:同一个包两边都装。比如 numpy,conda 装了一个版本,pip 又装了一个,结果 import 的时候加载的是哪个取决于路径顺序,非常混乱。解决办法是装之前先conda list 包名看看有没有,有就别用 pip 再装。
坑三:pip 版本太老。conda 环境自带的 pip 可能版本较低,装某些新包会失败。激活环境后先python -m pip install --upgrade pip升级一下。
我的原则是:优先 conda,conda 没有再用 pip,且 pip 装完记录一下装了啥,方便以后排查。
6.3 环境越建越多怎么管理
用久了你会发现环境一大堆,conda env list拉出来一长串,自己都忘了哪个是干嘛的。我的管理习惯是:
- 环境名带用途前缀,比如
dl_pytorch、da_pandas、spider_scrapy,一看就知道干啥的。 - 定期清理,三个月没用过的环境,先
conda list看看装了啥,确认不需要就删掉。 - 重要环境导出 environment.yml 存档,放在项目目录里,环境删了也能重建。
- base 环境保持干净,只装 conda 自带的,别往里塞项目依赖。
还有个小技巧:conda clean --all可以清理 conda 的缓存包,能释放不少磁盘空间。我一般几个月跑一次,C 盘能腾出好几个 G。
6.4 几个我踩过的真实坑
坑一:中文路径。有次帮朋友配环境,他把项目放在“桌面/我的代码/”下面,结果 conda 创建环境时报编码错误。改成英文路径立马就好。所以项目路径、环境路径、Anaconda 安装路径,全部用英文,这是铁律。
坑二:杀毒软件拦截。Windows 上某些杀毒软件会把 conda 创建环境时的文件操作当成可疑行为,导致环境创建到一半失败。遇到这种情况,把 Anaconda 目录加到杀毒软件白名单里。
坑三:vscode 终端默认用 PowerShell。PowerShell 下conda activate有时候不生效,需要先conda init powershell。或者干脆把 vscode 默认终端改成 Command Prompt,在设置里搜terminal.integrated.defaultProfile.windows改一下。
坑四:环境激活了但 pip 装到别处。这种情况通常是环境变量里有多个 Python,pip 命令指向了系统那个。解决办法是用python -m pip install代替pip install,强制用当前环境的 Python 来装。
7. 进阶:让环境配置更专业的几个习惯
7.1 用 environment.yml 管理项目依赖
每个正式项目,我都会在根目录放一个environment.yml,内容大概长这样:
name: myproject channels: - defaults - conda-forge dependencies: - python=3.10 - numpy=1.24 - pandas=2.0 - pip - pip: - requests==2.31.0 - some-pip-only-package这样别人拿到项目,一条conda env create -f environment.yml就能复现一模一样的环境。版本号我一般写死到小版本,避免自动升级带来的意外。
7.2 给不同项目配不同的 vscode 工作区
vscode 的工作区功能很好用。你可以给每个项目单独存一个.code-workspace文件,里面记录这个项目的解释器、调试配置、插件推荐。打开工作区,环境自动切好,不用手动选。
配置方式是在项目里文件 -> 将文件夹添加到工作区,然后文件 -> 将工作区另存为,存成.code-workspace。里面可以写:
{ "folders": [{"path": "."}], "settings": { "python.defaultInterpreterPath": "D:\\conda_envs\\myproject\\python.exe" }, "extensions": { "recommendations": ["ms-python.python", "ms-python.vscode-pylance"] } }团队协作时把这个文件提交到仓库,新人拉下来打开就能用,省去一堆配置沟通。
7.3 定期维护环境的几个命令
最后分享几个我常用的维护命令,养成习惯能省不少事:
conda update conda # 更新 conda 自身 conda update --all # 更新当前环境所有包(慎用,可能引入不兼容) conda clean --all # 清理缓存 conda list --revisions # 查看环境变更历史 conda install --revision N # 回滚到第 N 个版本conda list --revisions这个功能很多人不知道,它记录了环境的每次变更,装崩了可以回滚,相当于环境的时光机。我有次升级某个包导致整个环境跑不起来,就是靠这个回滚救回来的。
环境搭建这件事,说难不难,说简单也容易踩坑。核心就三点:装对 Anaconda、建对环境、让 vscode 选对环境。把这三步走扎实,后面写代码就顺畅了。我这些年换过好几台机器,每次重装都是按这个流程走,基本半小时内能全部搞定。你要是卡在哪一步,多半是路径或者环境变量的问题,回头对照上面的排查表捋一遍,基本都能解决。