前言
初学 Python 时,第一道坎往往不是语法,而是环境:不同项目要的 Python 版本不一样,装了 A 库又把 B 库的依赖搞坏,换台电脑环境全没了。Anaconda 就是为解决这类问题而生的发行版——它把 Python、包管理器 conda、以及一大批科学计算相关的库打包到一起,装完即用。
但初学者对它有两大误解。第一,把 conda 和 pip 当成「二选一」的对立面,其实两者擅长的事不同,配合不好会互相打架。第二,把所有包装进base环境,日子久了 base 越来越臃肿,还埋下依赖冲突的隐患。本文从「是什么、和 pip 什么关系」讲起,再到创建环境、装包、导出配置的完整命令,最后集中列几个新手常踩的坑。
需要说明:Anaconda 与 conda 属于第三方工具,命令行参数的权威出处是 conda 官方文档;本文的命令以官方文档为准书写,若与你的版本对不上,请以conda <子命令> --help的输出为准。
一、Anaconda、Miniconda、conda、pip 的关系
先把这几个名词分清:
| conda | 包管理器 + 环境管理器 | 既能装包,也能建隔离环境 |
| Anaconda | 一个发行版 | 含 conda + Python + 大量预装库 + 图形工具 |
| Miniconda | 精简发行版 | 只含 conda + Python,装什么自己加 |
| pip | Python 包安装器 | 只管 Python 包,不建环境 |
conda 与 pip 的关键差别在于管的范围:conda 能安装并管理非 Python 的依赖(比如编译好的底层库),而 pip 只处理 Python 包。所以有「先用 conda 装、装不到再用 pip」的常见做法,但两者混用要小心,见后文坑点。
二、安装与初次验证
从 Anaconda 官网下载对应系统的安装包,按向导安装。安装完成后,打开「Anaconda Prompt」(Windows)或普通终端(macOS/Linux),运行:
conda --version
conda info
conda info会打印当前 conda 版本、base环境路径、channels(频道)、platform等信息。看到这些输出,说明 conda 已经可用。
在 Windows 上,如果是在普通 CMD 里运行conda提示找不到命令,通常是还没把 conda 初始化到该 shell。可以执行:
conda init
它会往 shell 配置文件里写入必要的初始化脚本,之后重新打开终端即可。conda init支持指定 shell(如bash、powershell),不确定就用默认的。
三、环境管理:核心命令表
环境(environment)是 conda 的核心概念,每个环境有独立的 Python 版本和包集合。下面是最常用的一组命令:
| 创建环境并指定 Python 版本 | conda create -n myenv python=3.11 |
| 克隆环境 | conda create -n copyenv --clone myenv |
| 删除环境 | conda env remove -n myenv |
创建环境后,命令提示符前面通常会出现(myenv),表示已进入该环境。一个完整的小流程如下:
# 建一个 Python 3.11 的环境
conda create -n demo python=3.11
# 激活
conda activate demo
# 确认当前用的是哪个 Python
python --version
# 退出
conda deactivate
注意conda env list的输出里,当前激活的环境前面会有*标记,base是默认环境。不要把所有工作都放在base里做——正确姿势是「一个项目一个环境」。
四、包管理
装包、升级、卸载的基本命令如下:
| 在当前环境装包 | conda install numpy |
| 指定环境装包 | conda install -n myenv numpy |
| 指定频道装包 | conda install -c conda-forge numpy |
| 指定版本 | conda install numpy=1.26 |
| 更新 conda 自身 | conda update -n base conda |
「频道(channel)」决定从哪里下载包。默认频道之外,conda-forge是使用很广的社区频道,很多新包会先出现在那里。用-c conda-forge指定即可。企业或商业使用时,请自行核对所使用频道的官方条款,这不属于技术问题,但会影响合规。
五、导出与重建环境
把环境共享给别人、或换机器复现,靠一个环境文件:
# 导出当前环境的依赖清单
conda env export -n myenv > environment.yml
# 在另一台机器上按文件重建(推荐写法)
conda create -n myenv --file environment.yml
导出的environment.yml会记录 Python 版本、各包的版本和来源频道,是复现环境的可靠依据。较新的 conda 文档还推荐用conda export生成锁文件(lockfile),它能记录更精确的解析结果,支持跨平台重建;具体用法以你所用 conda 版本的文档为准。
六、图形界面与常用附带工具
不习惯命令行的话,Anaconda 自带图形界面Anaconda Navigator,可以在里面点击完成「创建环境、安装包、启动应用」这些操作,效果和命令行一致,只是更直观。
安装时通常还会带上几个常用工具:
| Jupyter Notebook | jupyter notebook | 浏览器里逐块运行代码 |
| JupyterLab | jupyter lab | 功能更全的笔记本界面 |
| Spyder | spyder | 偏 IDE 风格的科学计算编辑器 |
这些工具同样装在环境里,属于普通包——某个环境里没有,就在该环境里conda install jupyterlab装一个。另外,conda info会列出环境目录(envs directories),想知道某个环境具体建在哪个路径下,看这里或conda env list的输出即可。
常见坑点
- ❌ 在全新终端里直接敲
conda activate myenv,报CommandNotFoundError,以为没装好。
✅ 先执行conda init初始化 shell,重开终端再激活;或改用 Anaconda Prompt。
- ❌ 所有库都往
base里装,用久了各种版本冲突,import到处报错。
✅ 每个项目单独conda create -n <名字>,base只留 conda 本身。
- ❌ 在同一个环境里先
conda install又pip install同一个包,依赖记录出现两份来源。
✅ 优先用 conda 装;conda 确实没有才用 pip,并且尽量把 pip 安装放在最后一步。
- ❌ 忘了写
-n myenv,本想装进项目环境,结果装到了当前激活的另一个环境或 base。
✅ 装包前先conda env list确认激活的是哪个环境,必要时显式-n指定。
- ❌ 把
environment.yml当成「跨平台万能钥匙」,换到不同操作系统后重建失败。
✅ 环境文件常包含平台相关的构建版本;跨平台时按需删减或改用锁文件方案。
- ❌ 在 Windows 的普通 CMD 里既想用
activate又想用conda activate,两者行为不一致。
✅ 统一使用conda activate;conda init后各 shell 行为会保持一致。
- ❌ conda 卡在「Solving environment」很久,反复重试却没有改善。
✅ 先把 conda 更新到较新版本(conda update -n base conda),新版本求解器通常更快;具体版本行为以官方文档为准。
- ❌ 想用 conda 建一个 Python 2.7 环境来跑老代码,还指望能长期维护。
✅ Python 2.7 已于 2020 年 1 月 1 日停止维护;新项目一律用 Python 3,老代码应逐步迁移。
总结
| 建环境 | conda create -n myenv python=3.11 |
| 切环境 | conda activate myenv/conda deactivate |
| 装包 | conda install -n myenv numpy |
| 指定频道 | conda install -c conda-forge numpy |
| 删环境 | conda env remove -n myenv |
| 导出 | conda env export -n myenv > environment.yml |
Anaconda 的价值不在「预装了多少库」,而在「让每个项目拥有干净、可复现的独立环境」。养成「一项目一环境、能用 conda 就不混 pip、环境文件随手导出」这三个习惯,初学者就能绕开大半的环境问题。遇到记不准的参数,用conda <子命令> --help查,比在网上搜来的命令可靠。