
1. 安装前的准备搞清楚你到底要装什么1.1 为什么非得在 Ubuntu 20.04 上装 Anaconda先说结论如果你需要在 Linux 环境下做 Python 开发、数据科学、机器学习相关的事情Anaconda 几乎是绕不过去的一环。它本质是一个 Python 发行版把 Python 解释器、pip、conda 包管理器、以及几百个常用的科学计算库numpy、pandas、matplotlib、scikit-learn 这些全部打包在一起。Ubuntu 20.04 系统自带的 Python 3.8 只提供了最基础的解释器想装第三方库要自己手动处理依赖关系、虚拟环境、权限问题一不留神就把系统 Python 环境搞坏了。Anaconda 的解决思路很简单粗暴所有东西都隔离在自己的目录里互不干扰想怎么折腾都行。基于我自己的实操经验Ubuntu 20.04 算是 Anaconda 支持得最舒服的系统版本之一。它发布得早glibc 版本不高不低Anaconda 官方安装包对它的兼容性测试做得非常充分不像新版系统那样偶尔会遇到某个库需要额外编译的情况。如果你用的是 WSL2 里的 Ubuntu 20.04也完全适用下面的步骤基本一字不改就可以直接用。1.2 装之前必须确认的三件事第一件事看系统架构。Anaconda 官方提供了 x86_64 和 aarch64ARM 架构两种安装包绝大多数电脑是 x86_64但 Apple M 系列芯片或者一些 ARM 开发板就要用 aarch64 版本。用uname -m查一下输出x86_64就选 x86_64 安装包输出aarch64就选 aarch64。第二件事确认系统 Python 版本。Ubuntu 20.04 自带 Python 3.8Anaconda 安装包自带的 Python 版本会更新比如 Python 3.11 或 3.12两者互不冲突因为 Anaconda 会把所有文件放到自己的目录里。不要尝试卸载系统自带的 Python那会导致系统功能异常很多系统工具依赖它。第三件事磁盘空间。Anaconda 安装后大概占 3~5GB 空间加上后续创建虚拟环境、装 PyTorch 或 TensorFlow 这类大库准备 10GB 以上的余量比较稳妥。我遇到过磁盘写满导致 conda 环境损坏的情况恢复起来非常麻烦所以提前看一眼df -h心里有数。提示如果你的系统已经装过 Miniconda 或者之前版本的 Anaconda装新版本之前最好把~/.bashrc里旧的 conda init 相关代码清掉避免 bash 启动时重复初始化报错。2. 下载与安装最稳妥的完整流程2.1 去哪下载安装包、怎么选版本Anaconda 官方下载页面会提供最新版本的安装包链接但国内网络直接访问官方源经常慢得让人抓狂。我自己的做法是优先用清华大学的 TUNA 镜像源在浏览器里打开https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/按时间排序找最新的Anaconda3-2024.10-1-Linux-x86_64.sh这类文件。文件命名规则很好理解前面是版本号中间表示系统最后是架构。这里有个细节值得多说一嘴Anaconda 其实还有 Miniconda 这个轻量版只有 conda 和 Python其他库要自己装。如果你网络条件好、或者想要最小化安装Miniconda 也很香。但新手我更推荐完整版 Anaconda省去后面挨个conda install的麻烦。我自己两台机器用的就是不同方案一台 Windows 上装 Miniconda 做轻量开发一台 Linux 服务器上装 Anaconda 做深度学习和数据处理两种情况都踩过不少坑。选版本的时候从“稳定”角度出发不建议追最新尤其是刚发布的版本。我习惯选发布两三个月以上、网上反馈比较稳定的版本。Anaconda 的版本号对应的是安装包内部自带的 Python 版本比如 2024.10 版自带 Python 3.12。有些老项目依赖的库还没适配 Python 3.12这时候反而要选老一点的 Anaconda 版本比如 2023.09 自带 Python 3.11兼容性更好。这个思路跟装系统一样生产环境别当小白鼠。2.2 用 bash 命令安装并初始化环境变量下载完成后进入安装包所在目录执行bash Anaconda3-2024.10-1-Linux-x86_64.sh安装过程会先显示一段许可协议按回车翻页输入yes同意。然后它会问安装路径默认是$HOME/anaconda3我强烈建议不要改就用默认路径。原因很简单Anaconda 的默认路径被写死在很多配置和脚本里改了路径后续装某些包时可能出现CondaValueError: prefix already exists这类奇怪问题排查起来费劲。接下来它会提示是否运行conda init来把你 shell 初始化。这一步很关键一定要选yes。conda init 会在你的~/.bashrc末尾添加一段代码让每次打开终端时自动把 anaconda 的 bin 目录加到 PATH 里同时初始化 shell 钩子。选no的话装完后 conda 命令完全不可用每次还得手动 source 环境脚本非常麻烦。安装完成后重新打开终端或者执行source ~/.bashrc这时命令行前缀会出现(base)说明 conda 的 base 环境已经激活了。有小白朋友问过我这个(base)是什么是不是装了什么多余的东西它其实就是 Anaconda 默认的基础环境相当于 Python 环境的一个初始容器。你可以选择一直用它也可以创建独立的虚拟环境来隔离项目依赖后面我会详细说。2.3 安装后立刻做的一件事把下载源换成国内镜像装完 conda 后第一件事就是配置 conda 的软件源。默认官方源的服务器在国外下载包的速度真的不能忍。打开终端执行以下命令把 conda 的下载源换成清华镜像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 --set show_channel_urls yes执行完~/.condarc文件里就多了对应的配置。注意清华源还提供了msys2和pytorch的第三方 channel如果以后要在 Windows 上用 conda 装 PyTorch可以把https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/也加进去。加了这些镜像源之后实测下来下载速度能从几十 KB/s 提到几 MB/s体感非常明显。注意如果你要用 conda 安装 PyTorch建议去 PyTorch 官网用conda install pytorch torchvision torchaudio cpuonly -c pytorch这里的-c pytorch是指定官方 channel。如果已经把pytorch加入了清华镜像的 cloud 频道那实际上-c pytorch会优先访问清华镜像里的 PyTorch 包速度比直接访问官方源快很多。3. 环境配置与验证一个都不能少3.1 验证 conda 命令和 Python 版本装完环境变量也配置好后先做基础验证。在终端里依次执行conda --version python --version which python正常情况下会分别输出类似conda 24.9.2、Python 3.12.7、/home/你的用户名/anaconda3/bin/python。第三步输出的是当前 python 命令的实际路径它直接决定你用到的 Python 是 Anaconda 的还是系统自带的。/home/用户名/anaconda3/bin/python说明 PATH 生效了。如果conda --version提示conda: command not found大概率是 PATH 没生效或者安装时没选 conda init。解决办法是执行source ~/.bashrc再试一次如果还是不行手动在~/.bashrc末尾加一行export PATH/home/你的用户名/anaconda3/bin:$PATH然后source ~/.bashrc。这个方法很土但有效。3.2 配置 conda 的频道优先级与 pip 源安装完之后有个经常被忽略的配置conda 的 channel 优先级。默认情况下 conda 安装包时会从 channels 列表里按顺序找第一个找到了就用第一个的。如果你手动添加了清华源conda config --show channels会看到你刚才添加的 source 列表。这里有一个容易踩坑的点如果同时配置了官方源和清华源conda 可能会因为版本号不同、包名冲突而出现依赖解析变慢甚至失败的情况。我建议只保留清华源其他全部清掉保持干净的 channel 配置。执行conda config --remove channels conda-forge conda config --remove channels defaults把多余 channels 清掉。当然如果你需要 conda-forge 上的某些包比如最新版的 geopandas 或者 r-base可以暂时加上用完后删掉或者直接清掉整个 channels 配置。顺便把 pip 的源也换成国内镜像因为有些包 conda 里没有你还是会用 pip 装。在~/.pip/pip.conf没有就创建写入[global] index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple trusted-host mirrors.tuna.tsinghua.edu.cn这样 pip 安装也能享受国内镜像的速度。用 Anaconda 之前我习惯配~/.pip/pip.conf但后来发现一个细节——Anaconda 自带的 pip 在虚拟环境中也可以直接读这个配置文件。也就是说你只要配置一次全局全局生效之后不管在 base 环境还是虚拟环境pip 装包都默认走清华源。3.3 高性能场景在 WSL2 的 Ubuntu 20.04 中安装 Anaconda现在很多人在 Windows 上用 WSL2 跑 Linux 环境做开发。在 WSL2 的 Ubuntu 20.04 中安装 Anaconda和原生 Linux 环境几乎完全一样唯一要注意的是文件系统和内存的分配。WSL2 默认把系统文件放在虚拟磁盘里如果 Windows 的 C 盘空间紧张Anaconda 装的时候会提示空间不足。这种情况下可以考虑把 WSL2 的分发版迁移到 D 盘命令是wsl --export Ubuntu-20.04 ubuntu.tar wsl --unregister Ubuntu-20.04 wsl --import Ubuntu-20.04 D:\WSL\Ubuntu-20.04 ubuntu.tar导出的 tar 包体积很大10GB 以上很正常导入完成后原来的 C 盘空间就释放了。装 Anaconda 时路径仍然写在 Linux 子系统内部比如/home/用户名/anaconda3这些都在 WSL2 的虚拟磁盘里和 Windows 路径没有直接关系。所以 WSL2 场景下Anaconda 完全不用特殊配置如果遇到 win 路径转换问题大概率是 conda 在处理 Windows 路径和 Linux 路径之间的差异最简单的方法是直接在 Linux 端执行命令不要把 Windows 的路径传给 conda。4. 创建虚拟环境与配置 PyTorch最常被问到的场景4.1 conda 创建独立 Python 环境的原因与步骤拿到 Anaconda 之后很多人一上来就在 base 环境里pip install xxx这种方式初期没什么问题但项目一多就乱套了A 项目依赖 torch 2.0B 项目依赖 torch 1.8两个版本不兼容装完 A 再装 BA 就崩了。虚拟环境就是为了解决这个问题它把每个项目的依赖完全隔离开来互不影响。创建新环境的命令conda create -n your_env_name python3.10-n后面的参数是环境名称你可以按项目名、按用途命名。python3.10指定了环境的 Python 版本这个非常灵活不同环境可以用不同 Python 版本。我自己的习惯是每个重要项目都建独立环境比如torch2、nlp、数据分析一目了然。创建完成后激活环境conda activate your_env_name此时命令行前缀会从(base)变成(your_env_name)说明你已经进入新环境了。在这个环境里装的所有 Python 包都会被隔离pip list查到的只是当前环境的包。退出环境的命令是conda deactivate4.2 在虚拟环境中安装 PyTorch 的完整命令与验证方法安装 PyTorch 时我强烈建议用 conda 直接从 anaconda 的 pytorch channel 安装而不是用 pip。因为 conda 会自动解决 CUDA 相关的依赖比如 cudatoolkit、cudnn 这些pip 装的话这些底层库还得自己配容易踩坑。CPU 版本的安装命令conda install pytorch torchvision torchaudio cpuonly -c pytorchGPU 版本以 CUDA 11.8 为例子命令conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia注意用 conda 装 PyTorch 有个坑conda 默认会从你配置的 channels 里找包而 PyTorch 的包名和版本号在清华源、官方源之间可能存在差异。如果之前只配了清华源执行上面的命令时可能因为找不到pytorch-cuda而报错。解决方法是临时指定官方 channel或者提前把pytorch和nvidia的镜像源加入清华云频道https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/、https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/nvidia/这样 conda 就能从清华源里找到 PyTorch 的包速度还快。装完后验证是否成功在 Python 解释器里执行import torch print(torch.__version__) print(torch.cuda.is_available())如果第一个输出2.x.x说明 torch 装好了。torch.cuda.is_available()输出True说明 GPU 可用输出False且你确认自己的电脑有 NVIDIA 显卡且驱动装好可能是安装 PyTorch 时选了 CPU 版本或者 CUDA 版本不匹配。这种情况下重新创建环境用pytorch-cuda11.8对应的 CUDA 版本重装一遍。4.3 配置 PyCharm 使用 Anaconda 环境写 Python 代码时PyCharm 几乎是最顺手的 IDE。把 PyCharm 和 Anaconda 环境配置到一起用起来非常舒服。具体流程打开 PyCharm在File - Settings - Project - Python Interpreter里点击齿轮图标选Add然后在左侧选Conda Environment选择Existing environment在 interpreter 路径里填你虚拟环境下的 Python 解释器路径。路径在终端里可以查到which python比如我的环境是/home/用户名/anaconda3/envs/yolo_env/bin/python在 PyCharm 里填这个路径它就会自动识别这个 conda 环境并把它作为项目解释器。这样一来PyCharm 终端也会自动激活对应的 conda 环境不会出现“在终端里能用、在 IDE 里却 import 不到包”的诡异问题。另一个经常被问到的点是 PyCharm 里终端激活环境后提示warning: this p之类的内容。这是 conda 在非交互式 shell 中初始化时的提示不影响使用如果觉得碍眼可以在~/.bashrc中把 conda init 附加的内容改成仅初始化一次或者在 PyCharm 的 Terminal 设置里关掉 shell integration。5. 常见问题与排查装完总会遇到这些坑5.1 conda 命令找不到、Python 指向错误这个问题出现的频率非常高尤其是刚装完或者刚重装过 Anaconda。排查顺序是先看which conda如果提示 not found检查~/.bashrc里有没有 Anaconda 的 PATH 配置。没加就用前面的export PATH手动加。如果which conda有输出但which python指向/usr/bin/python系统自带的说明 conda 和系统 Python 的优先级顺序有问题。在~/.bashrc里确保export PATH/home/你的用户名/anaconda3/bin:$PATH出现在系统 Python 相关配置的前面新开的终端会优先使用 anaconda 的 Python。5.2 conda activate 激活环境时提示 CommandNotFoundError新装的 Anaconda 默认情况下应该支持conda activate但如果你在安装时跳过了 conda init或者用的是 bash 之外的 shell比如 zsh、fish就可能会出现这个提示。解决办法是执行conda init bash如果你用的是 zsh就执行conda init zsh。它会自动把 conda 的 shell 钩子代码写入对应的配置文件~/.bashrc或者~/.zshrc之后重新打开终端conda activate就正常了。不需要手动往配置里写代码。注意source activate是老版本 conda 的用法新版虽然兼容但官方已经建议统一用conda activate。我在求助别人时见过有人强行用source activate xxx虽然大部分时候能用但在一些脚本里会出现环境变量未生效的怪问题所以还是规范用conda activate更省心。5.3 创建环境时网络超时、依赖解析慢conda create -n env python3.10执行到一半提示CondaHTTPError: HTTP 000 CONNECTION FAILED或者一直在Solving environment转圈原因基本都是源的问题。先确认~/.condarc里配置的源是否可用用conda config --show channels如果 channels 里有官方源https://repo.anaconda.com/把它删掉只保留清华源或其他的国内镜像。依赖解析慢可能是因为 conda 在尝试从多个源拉取包元数据源多反而慢。把default_channels清掉单源解析速度会快很多。如果一直卡住Ctrl C中断然后执行conda config --set channel_priority flexible把频道优先级设置为 flexible有时候 strict 模式会因为版本限制导致长时间求解。5.4 安装 PyTorch 后 import torch 报错 Missing libcudnn / libcublas这个错误基本只出现在 GPU 版 PyTorch 安装后。原因是 conda 安装 PyTorch 时把 cudatoolkit 和 cudnn 也装了但它们的有些是需要手动补装的依赖比如cudnn、libcublas或者 conda 装的 cudatoolkit 版本和你系统驱动支持的 CUDA 版本不一致。排查思路先看nvcc -V和nvidia-smi显示的 CUDA 版本。如果nvidia-smi显示驱动支持 CUDA 12.x而 conda 安装的是 cudatoolkit 11.8PyTorch 在 import 时会去 11.8 的目录找库找不到就会报错。解决方案是创建新环境时指定与驱动匹配的 CUDA 版本conda create -n torch2 python3.10 conda activate torch2 conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia如果 nvidia-smi 显示的是 11.x就选pytorch-cuda11.8。实在不匹配就直接装 CPU 版本至少框架能顺利跑起来深度学习上 GPU 加速暂时先放一边。5.5 conda 环境里 pip 装包出现 externally-managed-environment 错误这个报错我以前见过很多次在新版 Python3.11环境中经常出现提示error: externally-managed-environment意思是当前环境是系统管理的pip 不允许直接装包到系统环境里。在 Anaconda 环境里遇到这个说明当前激活的不是 Anaconda 管理的环境而是系统 Python 环境。用which python确认一下如果指向/usr/bin/python说明conda activate没有生效回到 5.2 去解决。如果确实在 Anaconda 环境里还有这个报错可以用pip install --break-system-packages绕过但不推荐正解是确认环境路径。5.6 更新 conda 与 Anaconda 版本定期更新 conda 本身是有必要的bug 修复和包索引更新都需要。命令conda update conda conda update anaconda不要频繁更新尤其是生产环境。我见过一次更新后 Anaconda 的 base 环境损坏所有包都要重装的情况非常痛苦。如果只是想升级某个包直接conda install 包名版本号针对性升级即可别每次都大动干戈conda update --all。6. 一些可以帮你少走弯路的额外建议装完 Anaconda 这就算入了门但真正的坑往往在使用半年以后才暴露。我把自己这几年踩过的坑再集中复盘一下。一是不要轻易用 root 权限运行 conda。Anaconda 默认装在家目录下所有操作都不需要 sudo。用 root 装或者用 sudo 执行 conda 命令会导致文件属主混乱后续用普通用户想装包时会提示权限不足非常难受。除非是 Docker 容器里的镜像构建否则别动这个心思。二是 conda 环境也不能无限膨胀。我见过有人在 base 环境里装了一百多个包每次conda install都要跑好几轮依赖解析速度越来越慢。正确的做法是base 环境只保留 conda 和基础工具其余项目一律建独立环境。别嫌环境多硬盘空间不值钱环境乱了重装一天的时间才值钱。三是 conda 环境的导出与复制。换机器或者给别人复现项目时把自己环境里的包列表导出conda env export environment.yml换到新机器上创建相同的环境conda env create -f environment.yml这个environment.yml可以提交到代码仓库里团队协作时其他成员一条命令就能把环境拉起来。注意conda env export会带系统相关的包版本信息跨平台时偶尔会出问题比如 Linux 上导出的包在 macOS 上找不到。遇到这种情况用conda env export --from-history只导出你显式安装过的包和版本兼容性会好很多。四是 Anaconda 装了之后也不要过度依赖它。现在 Python 官方主推的 venv 标准库也能做虚拟环境用 pip 加requirements.txt管理依赖也没问题。Anaconda 的优势在于对科学计算生态的支持更成熟、包管理更省心但如果你只是写写小脚本venv 反而更轻量。工具选型这事顺手就是最好的。最后分享一个我个人的使用习惯在~/.condarc里配置了changeps1: false这样激活环境后命令行前缀不会改变有效避免在深目录里路径太长把整行占满。配合conda config --set auto_activate_base false每次打开终端不会自动进入 base 环境需要哪个环境就conda activate哪个。这些设置因人而异但确实让我的日常使用舒服了很多。