
作为一个常年跟 Python 环境打交道的人我每次换了电脑或者接到一台新服务器干的第一件正经事基本都是同一个装 Anaconda。别笑这个动作看似基础实际上决定了后面所有项目能不能顺利进行。Ubuntu 20.04 是很多云服务器、教学机器和 WSL 用户默认使用的发行版配合 Anaconda 搭建 Python 环境基本是目前数据科学工作流里最通用的起点。这篇文章就是一套我在 Ubuntu 20.04 上完整安装并配置 Anaconda 的流程记录包括下载校验、安装选项、源切换、虚拟环境使用以及我实际踩过的坑和排查方法新手可以照着一步步做有一定基础的朋友也能从中找到几个以前忽略掉的细节。我不会在这里灌什么理论直接说结论装好之后你会得到一个独立的 Python 工具链一套像 conda 这样能够方便创建环境、切换版本、安装预编译库的包管理工具以及后续跑 PyTorch、TensorFlow、OpenCV、Jupyter 这些重型工具时的稳定基础。这篇文章适合刚入手 Ubuntu、准备开始学习数据科学或机器学习的人也适合像我一样懒得每次都在环境问题上花时间的“老油条”。下面开始。1. 项目背景为什么我先说“环境隔离”再说“安装步骤”很多新手第一次装 Anaconda 之前最大的疑问是系统里明明已经有 Python 了为什么还要装一套新的这个问题如果不搞清楚后面很多配置步骤你会觉得莫名其妙。Ubuntu 20.04 系统自带的 Python 3.8 是给操作系统用的apt 包管理、系统服务、部分 GUI 工具都依赖它。如果你直接往系统 Python 里 pip install 一堆包一旦某个包升级后破坏了系统依赖后果轻则软件起不来重则 apt 都被搞坏。我就见过同事在系统 Python 里装了新版 setuptools然后整个 apt 提示 Python 版本错误最后只能靠恢复备份解决问题。Anaconda 的解决思路是“各玩各的”它把 Python 解释器、包管理器、常用库全部装进一个独立目录默认情况下不碰系统 Python也不会用 sudo 权限去动系统文件。与此同时conda 可以在不影响 base 环境的前提下创建若干个互相隔离的虚拟环境。比如你同时要跑 Python 3.7 的旧项目和 Python 3.11 的新项目在 conda 里就是两个环境的事切换起来一条命令。还有一个很现实的理由conda 对预编译库的处理比 pip 友好得多。像 numpy、scipy、pandas 这种带 C 扩展的库pip 经常要现场编译编译失败后报错一长串conda 直接从仓库拉编译好的二进制包省心不少。PyTorch 在 conda 里安装也特别方便这也是大量机器学习教程默认用 conda 的原因。1.1 Anaconda 与 Miniconda、系统 Python 怎么选我平时被问得最多的问题就是这个。三者的关系很简单Miniconda 是精简版的 Anaconda只带 conda、Python 和一个最小的包集合Anaconda 则额外预装了两百多个常用科学计算和数据分析包。系统 Python 则是什么都没装也不建议装太多东西。方案体积预装包适用场景系统 Python很小无系统脚本、最轻量需求Miniconda约 80MB极少容器、CI、磁盘紧张、希望环境最干净Anaconda约 3GB250 个常用包本地开发、教学、机器学习、数据分析按照这个标题的场景我们走的是完整的 Anaconda 安装毕竟标题就叫 Anaconda 环境。但你在实际项目中如果只想用 conda 的管理能力完全可以用 Miniconda后续操作基本一致。1.2 安装前必须确认两件事第一Ubuntu 20.04 是 64 位系统但你得确认 CPU 架构。绝大多数电脑和云服务器是 x86_64但一些 ARM 云主机和树莓派要选 aarch64 的安装包。打开终端执行uname -m输出x86_64就下载 x86_64 版本输出aarch64就下载 ARM 版本。别看了标题是 Ubuntu 20.04 就无脑下 x86_64这个错误我在 ARM 设备上犯过。第二确认磁盘空间。Anaconda 完整安装大概需要 3GB 可用空间如果还要创建项目环境建议至少留出 10GB。安装目录默认放在你的用户主目录也就是~/anaconda3如果你的主目录在系统盘且空间紧张后面我会讲怎么改安装路径。2. 下载安装包与完整性校验别省这一步下载渠道我一般有两个官方源和清华镜像。官方地址是https://www.anaconda.com/download不过国内访问速度经常不稳定几百 MB 的安装包断断续续下到一半会很让人崩溃。清华开源软件镜像站提供了完整的 Anaconda 安装包存档下载速度稳定得多地址格式类似https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.09-0-Linux-x86_64.sh注意版本号会持续更新你需要根据当前可用的最新版本替换中间的版本号。我习惯先用浏览器打开镜像站的 archive 目录看一眼最新的文件名再复制到终端下载。2.1 用 wget 下载并支持断点续传下载建议用 wget遇到网络闪断可以继续下载不用从头再来wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.09-0-Linux-x86_64.sh选项-c表示断点续传。如果下载目录不在当前目录记得先 cd 到你想放安装包的目录或者写绝对路径。2.2 SHA256 校验为了保证安装包没损坏也没被篡改这一步很多人跳过但我强烈建议做。安装包在传输过程中可能损坏一旦安装包坏了安装到一半报错你很难判断是安装问题还是包的问题。更严重的是互联网上容易搜到各种来路不明的 Anaconda 安装包来源如果被人动过手脚安装后你所有的 Python 项目都在别人的监视之下。先看官方或镜像站给出的 SHA256 校验值然后在安装包所在目录执行sha256sum Anaconda3-2023.09-0-Linux-x86_64.sh把输出的 64 位十六进制字符串和官网上给出的值对比完全一致再继续。如果对不上重新下载。这套流程核心就一句话验证文件完整性和真实性是环境搭建的前提。另外如果你的网络环境可以从官方源直接下载优先在官网页面找对应架构的安装包鼠标右键复制链接后在终端下载会更稳一些。3. 安装过程实录与 conda init 的底层逻辑下载完成并校验通过后开始安装。在安装包所在目录执行bash Anaconda3-2023.09-0-Linux-x86_64.sh安装向导是纯文本交互界面过程不复杂但有几个坑需要提前了解。3.1 安装界面每一步都选什么第一步会显示一段很长的协议文本让你按 Enter 继续浏览。这里不需要逐字读完直接按几次 Enter 翻到最底部输入yes表示接受协议。第二步问安装目录。默认是~/anaconda3直接按 Enter 即可。如果你想把 Anaconda 放到其他位置比如/data/anaconda3或者/opt/anaconda3就在这里输入绝对路径。不过我一般建议普通用户装在默认目录后面减少权限问题。如果你确实要装在/opt下请先确认该目录你自己拥有写权限或者安装完再调整属主否则 conda 在自己的目录里写缓存都会报 Permission denied。第三步是最关键的一个问题Do you wish the installer to initialize Anaconda3 by running conda init?这里我建议输入yes。conda init做的事情是往~/.bashrc里写入一段 conda 初始化代码这样每次打开新终端conda 命令才能被识别base 环境也会默认激活。输入no也可以但之后你需要手动配置环境变量新手很容易卡在conda: command not found。等待安装脚本跑完后执行source ~/.bashrc让刚写入的配置生效。然后验证conda --version which python which pip正常情况下conda --version会输出 conda 的版本号which python会指向~/anaconda3/bin/pythonwhich pip指向~/anaconda3/bin/pip。如果连续几个命令都正常说明安装基本成功了。3.2 conda init 到底改了什么理解conda init做了什么对后续排查问题非常关键。打开~/.bashrc你会看到一段由# conda initialize 和# conda initialize 包裹的代码块。它的作用是找到 conda 的安装位置然后加载一个叫conda.sh的脚本# conda initialize # !! Contents within this block are managed by conda init !! __conda_setup$(/home/你的用户名/anaconda3/bin/conda shell.bash hook 2 /dev/null) if [ $? -eq 0 ]; then eval $__conda_setup else if [ -f /home/你的用户名/anaconda3/etc/profile.d/conda.sh ]; then . /home/你的用户名/anaconda3/etc/profile.d/conda.sh else export PATH/home/你的用户名/anaconda3/bin:$PATH fi fi unset __conda_setup # conda initialize 如果你在安装时选择了no或者因为某些原因想重新执行初始化不用去手写这些内容直接运行完整的 conda 路径~/anaconda3/bin/conda init bash这个命令会自动为你把上面的代码块写入~/.bashrc。多次执行也不会产生逻辑混乱因为 conda init 会识别并替换旧的块。但如果某天你手动把这段内容打乱了那就要小心了后面第 7 章我会详细说。3.3 刚装完就关掉 base 自动激活安装完成后你会发现每打开一个新终端命令行提示符前面会出现(base)。这是因为 conda 默认自动激活 base 环境。这在刚开始时可能没什么感觉但时间长了你会发现终端启动慢、提示符复杂而且每次写脚本都要考虑是不是在 base 环境里。我自己装完 Anaconda 的第一件事通常是关闭 base 自动激活conda config --set auto_activate_base false执行后会修改~/.condarc文件之后打开新终端不会自动进入 base 环境想用 conda 时手动执行conda activate即可。这样既保留了 conda 功能又避免了 base 环境对你日常操作的干扰。4. 安装完成后第一件事配置国内镜像源如果你是在国内网络环境安装这一步几乎必须做。conda 默认使用官方仓库下载包的速度非常慢尤其是在创建新环境或者安装机器学习库的时候动辄下载几百 MB等得人想砸电脑。配置国内源的方法很简单我用的是清华源。直接编辑~/.condarc文件或者用 conda config 命令写入。推荐直接写文件便于一次性管理vim ~/.condarc把下面内容粘进去channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud保存后执行conda clean -i清理索引缓存然后测试一下conda search numpy如果能快速返回结果列表说明源配置成功。之前我遇到过配置后 conda 命令报错多半是 YAML 格式不对或者源地址拼写错误检查一下有没有多余空格即可。4.1 pip 源也顺手换掉conda 源解决的是 conda 安装包的速度但有些包 conda 仓库里没有或者版本太旧我还是会用 pip 来装。这时候 pip 默认的官方源同样慢所以建议顺手配置pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令会在~/.config/pip/pip.conf里写入配置之后执行 pip install 就会走清华 PyPI 镜像。注意pip 配置如果写在 conda 环境外对所有环境都会生效这一点很方便不用每个环境单独设置。4.2 换完源后依然慢是怎么回事如果你配置了镜像源下载速度还是像蜗牛一样先检查一下是不是在创建环境时指定了其他额外频道。比如有人会在命令行里写conda create -n demo python3.9 -c conda-forge这个-c conda-forge会强制从 conda-forge 官方源下载跟你~/.condarc里的配置是两回事。解决办法是不要在命令行手动指定-c让 conda 按配置文件里的自定义 channel 走。另外检查一下 DNS 和防火墙设置镜像站偶尔也会出现故障遇到问题可以换中科大源、阿里源交叉验证。5. 环境隔离实操创建、激活、导出与删除Anaconda 装好后最核心的使用方式是创建独立的虚拟环境。我见过有人把 Anaconda 装上后从来不创建环境所有包都装在 base 里结果两三个项目互相冲突最后只能重装系统。这其实绕过了 Anaconda 最大的价值。5.1 创建 Python 3.10 项目环境创建新环境的命令格式是conda create -n 环境名 python版本号比如我想创建一个跑机器学习项目用的环境名字叫 mlPython 用 3.10conda create -n ml python3.10命令执行后conda 会搜索该 Python 版本及其依赖展示一个计划列表让你输入y确认。安装完成后激活这个环境conda activate ml注意观察终端提示符变成(ml) 用户名主机名就表示已经进入了 ml 环境。这时再执行python --version看到的应该是 Python 3.10.x和 base 或者系统 Python 都不一样两个环境互不影响。5.2 环境基本操作速查我整理了一份最常见操作对照表方便查操作命令列出所有环境conda env list创建指定 Python 版本环境conda create -n name python3.9激活环境conda activate name退出当前环境conda deactivate复制一个环境conda create -n name-copy --clone name删除环境conda remove -n name --all安装包conda install numpy安装指定版本包conda install numpy1.24.0查看当前环境包列表conda list这些命令熟练掌握后环境管理基本上不会再有阻碍。这里有个我自己坚持的习惯环境名一定和项目名对应比如项目叫 yolo_detect环境名就叫 yolo_detect。时间长了环境一多如果随便起叫 test、env1 这种名字过两周你就分不清谁是谁了。5.3 环境导出与复现多台机器部署不头疼conda 最适合团队协作的功能之一是环境导出。当你的项目在 A 机器上调试好要在 B 机器或服务器上复现时一条命令就能搞定conda env export environment.yml新机器上执行conda env create -f environment.yml这样 B 机器会创建一个和 A 机器一模一样的环境。如果你的项目比较简单依赖不多也可以用pip freeze requirements.txt然后在另一个环境里执行pip install -r requirements.txt。两者的差别是conda env export会记录 conda 的渠道、构建版本更精确但也更啰嗦pip freeze只记录 pip 包名字和版本简洁一些。我自己是如果项目主要在 conda 里管理就用 environment.yml如果有些包只能从 pip 装就两份文件都保留先 conda 后 pip。6. 与 PyCharm、VS Code 和 Jupyter 的集成Anaconda 装好了、环境也建好了接下来必然要和你的编辑器或开发工具配合。这一步如果配不对经常出现“明明在终端激活了环境编辑器里 import 的却是另一个 Python”的问题。6.1 PyCharm 里绑定 conda 环境PyCharm 打开项目后依次进入 File - Settings - Project: 项目名 - Python Interpreter。点击右上角的齿轮选 Add Interpreter - Add Local Interpreter然后选择 Conda Environment。如果已经手动建好了环境选 Existing environment在 Interpreter 路径里找到/home/用户名/anaconda3/envs/ml/bin/python。如果还没建可以在 New environment 里直接指定 conda 和 Python 版本让 PyCharm 替你调用 conda 创建。确认后PyCharm 的终端也会自动使用当前环境非常方便。这里有个小坑PyCharm 加载 conda 环境时需要 PyCharm 能读取到 conda 可执行文件。如果你是默认路径安装通常自动识别如果是自定义路径安装需要在 Conda executable 里手动指定比如/data/anaconda3/bin/conda。6.2 VS Code 选择解释器VS Code 相对更轻量。安装 Python 扩展后按CtrlShiftP输入Python: Select Interpreter在列表里找到ml环境对应的 Python选中即可。之后打开终端VS Code 会自动激活该环境。如果列表里没有 conda 环境检查一下 VS Code 的 python.condaPath 设置是否指向了正确的 conda 路径或者重启 VS Code 让扩展重新扫描。6.3 Jupyter Notebook 中注册 conda 环境很多人想用 Jupyter但新建 notebook 时发现 interpreter 只有 Python 3没有自己的 ml 环境。这是因为 Jupyter 默认只显示内核所在的环境需要在 ml 环境里注册内核。conda activate ml conda install jupyter ipykernel python -m ipykernel install --user --name ml --display-name Python 3.10 (ml)执行完后再打开 Jupyter新建 notebook 时下拉框里就会出现Python 3.10 (ml)。选它notebook 就运行在 ml 环境里了。--display-name是显示给用户看的名称可以随意取--name是内核的技术名称建议跟环境名一致方便以后删除不用的内核jupyter kernelspec uninstall ml。7. 实战排查我在这套流程里踩过的坑安装 Anaconda 这件事本身不难难的是安装完以后出了问题不知道怎么排。我把这几年实际遇到的典型问题整理成一份排查速查表供你参考。7.1 command not found: conda这是最常见的报错。现象是终端执行conda --version提示找不到命令。原因一般有三种第一种安装时选择了no没有执行 conda init。解决办法是手动执行~/anaconda3/bin/conda init bash或者把~/anaconda3/bin加入 PATH。第二种执行了 conda init但当前终端会话没有重新加载配置文件。执行source ~/.bashrc即可。如果是在 bash 之外的环境比如 zsh需要conda init zsh。第三种~/.bashrc里的 conda 初始化块在编辑时被误删了。重新执行conda init bash即可。记住 conda 自身有重写能力不需要你手工拼 PATH直接用 init 命令修复最稳。7.2 多次初始化导致 .bashrc 出现重复块我之前图省事遇到 conda command not found 就再敲一次 conda init bash后来打开 .bashrc 发现两个 conda initialize 块。虽然 conda init 本身会替换管理块但如果你把旧的块手动改乱过很可能生成两个互不相同的块最终导致终端启动报错或 conda 命令奇奇怪怪。解决办法是手动打开~/.bashrc找到所有# conda initialize 之间的内容只保留最新一份其余删掉。然后source ~/.bashrc再看conda --version是否正常。7.3 安装时用了 sudo结果到处是权限问题Anaconda 官方安装脚本允许你用 sudo 运行但我不建议。用 sudo 安装到 root 的目录或其他系统目录后面创建环境、写缓存时普通用户没有权限报错一堆。比如PermissionError: [Errno 13] Permission denied: /root/anaconda3/pkgs/cache你可能会把目录 chmod 777 强行解决但这会引入更多安全问题。正确做法是始终用普通用户安装文件目录归该用户所有。如果已经用 sudo 装错了最简单的办法是删掉重装在当前用户的目录下成本比去慢慢修改权限低得多。7.4 CondaHTTPError 或 SSL 证书相关报错配置国内源之后偶尔遇到 CondaHTTPError 或证书验证错误。常见原因是~/.condarc里配置了旧的、已失效的镜像地址或者配置文件格式有问题。常见的解决步骤conda clean -i conda config --show channels先看当前 channels 配置是否正常。如果发现地址不对直接把~/.condarc里的频道列表清空再用标准方式重新配置conda config --remove-key channels conda config --add channels conda-forge如果问题仍在可以临时用官方源测试一下conda search numpy --override-channels -c defaults如果官方源也不行那就是网络链路问题可以换镜像站试试。关键在于学会用--override-channels跳过本地配置定位问题。7.5 磁盘空间被 pkgs 目录吃满Anaconda 每安装一个包都会在~/anaconda3/pkgs里缓存下载的安装包。创建的环境多了、安装包大了pkgs 目录轻松占用十几 GB 是很正常的事。清理方法conda clean --all这个命令会清除所有缓存的包、索引文件和临时文件。如果你的系统盘空间紧张还可以把缓存目录挪到其他分区conda config --add pkgs_dirs /data/conda_pkgs conda config --add envs_dirs /data/conda_envs前提是/data目录先创建好并且当前用户有写权限。目录迁移后之前的旧缓存需要手工删除。7.6 系统 Python 和 conda Python 混用最微妙的问题往往是“双解释器”。你明明在 conda 环境里但运行pip install时pip 却指向了系统 Python或者反过来了。常见的危害是包装错环境然后 import 的时候找不到模块。我给的方案非常简单在 conda 环境里不要裸用pip和python之外的命令统一用python -m pip install这种方式。因为python -m pip保证了 pip 一定会装到当前 python 所在的环境不会受 PATH 顺序影响。这个习惯我一直保留避开了很多环境错乱问题。7.7 终端启动越来越慢如果你每次打开终端都要等一两秒多半是 conda 初始化脚本拖慢了启动速度。尤其是开了非常多的 conda 元数据或者网络不通时 conda 尝试检查更新终端卡顿明显。解决思路有两个第一如果你不需要每次打开终端都在 base 环境执行conda config --set auto_activate_base false可以减少启动时的加载工作量。第二如果项目明确需要某个环境就在项目根目录的.bashrc或终端启动配置里手动conda activate ml让 base 保持空置。7.8 卸载 Anaconda 的干净办法万一你要换 Miniconda或者彻底不想要 Anaconda 了删除也要干净。直接删目录会留下很多垃圾终端也可能继续加载 conda 报错。第一步清理缓存和环境conda clean --all第二步删除主目录rm -rf ~/anaconda3第三步清理配置文件。编辑~/.bashrc删掉# conda initialize 到# conda initialize 之间的内容再删除~/.condarc、~/.conda、~/.continuum这些目录。最后source ~/.bashrc验证 conda 命令已不存在。如果你把环境创建到了自定义目录记得一并删除那些 envs 目录。检查命令env | grep -i conda输出为空基本就清理干净了。最后我再分享一个坚持了很久的习惯不管是在公司服务器还是自己笔记本上我每次创建环境都会让环境名和项目名一一对应并且把environment.yml或requirements.txt提交到 git 仓库。这样不管是换电脑还是同事协作都能在最短时间内把运行环境复原省下大量时间。Anaconda 本身并不复杂真正复杂的是拿着一个混乱的环境去解决问题的时候。