ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu安装Anaconda全攻略:隔离环境、镜像加速与避坑指南

Ubuntu安装Anaconda全攻略:隔离环境、镜像加速与避坑指南 我到现在还记得第一次在 Ubuntu 上把系统自带的 Python 折腾崩掉的那个下午。起因特别简单就是一个项目需要装某个包我只记得用pip装了个新版本依赖结果 apt 下面的软件好几个打不开最后只能重装系统。后来在一台服务器上装了 Anaconda我才彻底明白在 Ubuntu 上搞 Python 环境隔离才是第一原则。这篇博文就把我从下载、安装、配置环境变量到创建虚拟环境、换国内镜像源、最后卸载清理的完整经验一次性写清楚适合刚接触 Linux、不想在系统 Python 环境里反复踩坑的人也适合那些装完 Anaconda 之后遇到各种奇怪问题、正在到处搜索解决办法的朋友。1. 为什么非要在 Ubuntu 上额外装一套 Python 环境1.1 系统自带 Python 的真实身份是系统组件很多新手最容易忽略的一点是Ubuntu 自带的 Python 不是你写代码用的它更像是系统的一个内部依赖。apt包管理器、GNOME 桌面环境、系统设置工具、甚至 Ubuntu 软件中心背后都在调用系统 Python。你可以执行apt remove python3试一试系统会直接警告你有一大堆核心软件包要被卸载。这意味着什么意味着你如果在系统 Python 里用pip乱装包特别是给某个库强行升级了版本很可能破坏系统组件的运行环境。我见过一个特别典型的案例同事为了装一个深度学习相关工具在系统 Python 里用pip install --upgrade setuptools结果第二天系统设置打不开了跑了好几次apt --fix-broken install才救回来。1.2 Anaconda 的核心价值就是隔离Anaconda 做的事其实不复杂它把 Python 解释器、pip、conda 包管理器、还有一大堆常用的科学计算库NumPy、Pandas、Matplotlib 这些全部装进一个独立目录里比如/home/用户名/anaconda3。这个目录和系统/usr/bin/python3完全隔离两边互不干扰。你在 Anaconda 自己的环境里怎么折腾都可以——装包、卸包、换 Python 版本、配置不同的依赖组合——都不会影响系统 Python。反过来系统升级也好、apt 安装软件也好也不会莫名其妙把你自己装好的库弄坏。这种隔离特性在服务器上更重要因为服务器通常不止一个人用或者不止一个项目在跑环境一旦混乱排查问题的时间成本高得惊人。1.3 Anaconda 还是 Miniconda不要盲目跟风网上教程里 Anaconda 和 Miniconda 经常混着写很多新手看哪个火就装哪个。其实这两个东西的关系很简单Anaconda 自带了几百个常见包装完基本开箱即用但体积动辄 3GB 以上Miniconda 只包含 conda 包管理器和 Python体积小很多需要什么包再自己用conda install安装。我的建议是如果你主要目的是做数据分析、机器学习、课程作业磁盘空间也不紧张直接装 Anaconda省心如果你是那种很在意环境干净、习惯精打细算的开发者或者只是偶尔用用 PythonMiniconda 更合适。我自己一开始装的是 Anaconda后来发现很多包其实根本用不上就换成了 Miniconda日常开发完全没受影响。2. 安装前的准备工作架构确认、版本选择与下载加速2.1 先确认系统架构这一步很多人忽略了下载 Anaconda 之前第一件事不是打开浏览器而是先确认你的 Ubuntu 是哪种 CPU 架构。这一步看起来多余但我在论坛里见过不止一个人拿 ARM 版本的 Ubuntu 去下载 x86_64 的安装包结果执行的时候直接报cannot execute binary file。在终端里执行uname -m如果输出是x86_64说明你的系统是 64 位 Intel/AMD 架构需要下载 x86_64 版本的安装包如果输出是aarch64说明是 ARM 架构比如树莓派、部分国产开发板需要下载对应的 ARM64 版本。这个信息直接决定了你后面下载哪个文件千万不能忽略。2.2 从官网下载还是用国内镜像Anaconda 的官网下载地址是https://www.anaconda.com/download进去之后页面会自动检测你的操作系统点击下载就行。不过在国内网络环境下直接从官网下载那个几个 GB 的安装包速度可能会让你怀疑人生。我自己一开始从官网下进度条动不动就卡住最后还得靠断点续传工具才拉下来。更省事的方式是直接用清华大学的开源软件镜像站。在终端里用wget下载wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh注意版本号会更新建议先到镜像站页面确认最新版本号。我一般习惯先打开https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/看一眼有哪些文件找到一个类似Anaconda3-2024.06-1-Linux-x86_64.sh的文件复制链接再下载。2.3 校验文件完整性防止安装过程莫名其妙报错下载完安装包之后强烈建议做一次 SHA-256 校验。这不是跟你有强迫症而是安装包在下载过程中如果损坏了后面安装的时候会出现很多莫名其妙的错误比如解压失败、file not found这类问题。到时候你排查半天最后发现是安装包下载不完整白白浪费时间。在终端里执行sha256sum Anaconda3-2024.06-1-Linux-x86_64.sh输出一串类似8678b0ca3d8f0f2f5f6f7b2dBd82cdfd9c9a0e9f0c7a6f2cc0a2c1f7b2b1d2f的哈希值。把这串值和官网或者镜像站提供的官方哈希值对比一下一致说明文件没问题不一致就重新下载。这一步看起来繁琐但实际只需要十几秒能省掉后面很大的排查成本。3. 命令行安装 Anaconda 完整流程3.1 执行安装脚本过程中这几个交互选择要留意下载完成并校验通过后进入安装包所在目录执行bash Anaconda3-2024.06-1-Linux-x86_64.sh安装脚本运行后首先会显示许可协议内容是 GNU General Public License 相关的说明。你需要按Enter键往下翻页一段一段看一直翻到底。翻完之后终端会提示你是否接受许可协议Do you accept the license terms? [yes|no]这里输入yes然后回车。注意输入的时候不要图快直接按y它这里要求的是完整输入yes。接下来是选择安装路径Anaconda3 will now be installed into this location: /home/你的用户名/anaconda3 Press ENTER to confirm the location Press CTRL-C to abort the installation Or specify a different location below默认安装路径是/home/你的用户名/anaconda3。如果磁盘空间允许我建议直接用默认路径回车确认就行。不要图省事装到系统目录比如/opt或者/usr/local因为 Anaconda 需要在当前用户目录下有写权限装到系统目录可能会遇到权限问题。如果你确实需要装到别的位置可以输入完整路径但强烈不建议新手改这一项。最后还有一个关键提示Do you wish the installer to initialize Anaconda3 by running conda init? [yes|no]这一步要输入yes。很多人在这里手快输入了no结果装完之后发现conda命令根本找不到还得手动配环境变量。选择yes之后安装脚本会自动把 conda 的初始化配置写入到你的~/.bashrc文件里省去手动配置的麻烦。3.2 安装完成后的第一次验证安装脚本跑完之后当前终端可能还不会立刻识别conda命令因为~/.bashrc文件虽然被修改了但当前会话还没有加载新的配置。你需要手动让配置生效source ~/.bashrc执行完之后你的终端提示符前面应该会出现一个(base)前缀这代表你已经自动进入了 Anaconda 的基础环境。这时候验证一下是否安装成功conda --version python --version which pythonconda --version会输出版本号比如conda 24.5.0which python应该指向/home/你的用户名/anaconda3/bin/python而不是/usr/bin/python3。看到这个结果就说明 Anaconda 安装成功而且正式接管了当前用户的 Python 环境。3.3 没运行 conda init 的补救办法有些朋友安装时手快选错了或者在用某些非交互式终端安装时可能没有执行conda init装完之后终端里输入conda会提示command not found。这时候不需要重新安装手动配置一下环境变量就行。编辑~/.bashrc文件nano ~/.bashrc在文件末尾追加export PATH/home/你的用户名/anaconda3/bin:$PATH保存退出后执行source ~/.bashrc。这样conda命令就能用了。不过这种方式只是简单地把 anaconda 的 bin 目录加入了 PATH没有执行 conda 的完整初始化逻辑会缺少conda activate等内置函数的一些辅助配置。更稳妥的办法是安装后手动运行一次conda init它会自动把所有必要的配置写进~/.bashrc比你手动加 PATH 要全面得多。4. conda 虚拟环境为每个项目单独隔离一套 Python4.1 为什么一定要用虚拟环境很多从 Windows 上转过来的朋友之前习惯用virtualenv到了 conda 这里还是习惯装完就用默认环境。在 conda 里默认环境base相当于你装完 Anaconda 后的初始环境。如果你什么都往base里面塞时间一长它就会变成一个大杂烩。虚拟环境的核心价值在于不同项目对 Python 版本和包版本的要求往往不一样。比如项目 A 需要tensorflow 2.4项目 B 需要tensorflow 2.10这两个版本在一个环境里基本不可能和平共处。虚拟环境可以把这两个项目彻底隔离开来互相不打扰。等哪天不需要了直接把这个环境删掉也不会污染其他项目。4.2 创建与切换虚拟环境的实操创建一个新环境指定 Python 版本为 3.9conda create -n myproject python3.9-n后面跟的是环境名称你可以自定义比如pytorch、web_dev、ml_lab等。执行后 conda 会解析依赖关系并询问你是否继续安装输入y确认。这里要注意conda 有时候会卡在Solving environment阶段后面我会专门讲这个问题。创建完成后激活这个环境conda activate myproject激活后终端提示符前面会从(base)变成(myproject)这表示当前处于myproject环境。此时输入python --version你会看到这个环境对应的 Python 版本。退出当前环境conda deactivate这里有个细节值得说如果你遇到conda activate不起作用大概率是没有执行conda init导致的。conda activate不只是一个 PATH 切换它还涉及 shell 函数、环境变量等一整套机制所以必须确保conda init已经正确执行过。4.3 环境管理常用命令一览平时用得最多的几个命令我列一下# 查看当前所有环境 conda env list # 查看当前环境下的所有包 conda list # 删除某个环境及其所有包 conda remove -n myproject --all # 复制一个环境 conda create -n new_env --clone old_env # 导出当前环境的依赖列表 conda env export environment.yaml # 从配置文件创建环境 conda env create -f environment.yaml其中conda env export是团队协作时特别好用的功能。换机器或者同事想复现你的环境时直接用这个 yaml 文件就能创建出一模一样的虚拟环境不用来回拷依赖列表。4.4 举个实战例子配置 PyTorch 环境配置深度学习环境是 conda 最常用的场景之一。我以 PyTorch 为例走一遍完整流程。首先创建 Python 3.9 的环境conda create -n pytorch python3.9 -y激活环境conda activate pytorch然后在 PyTorch 官网查询当前适合你机器配置的安装命令。如果用的是 NVIDIA 显卡需要先确认 CUDA 支持情况然后执行类似conda install pytorch torchvision torchaudio cudatoolkit11.8 -c pytorch如果你的电脑没有 NVIDIA 显卡或者不想用 GPU可以直接装 CPU 版本conda install pytorch torchvision torchaudio cpuonly -c pytorch等安装完成在 Python 里执行import torch print(torch.__version__) print(torch.cuda.is_available())如果torch.cuda.is_available()返回True说明 GPU 版本的 PyTorch 配置成功。这一步是很多人配置环境之后必做的验证确认 GPU 真的能被调用。5. 换国内镜像源彻底告别 conda 安装包的龟速和报错5.1 为什么默认源在国内这么不稳定conda 默认使用的软件源是https://repo.anaconda.com服务器在国外国内访问经常出现速度极慢甚至直接超时的情况。我印象最深的是有一次conda create -n test python3.9光是解析依赖就等了十几分钟下载到一半直接报CondaHTTPError: HTTP 000 CONNECTION FAILED那叫一个崩溃。要解决这个问题最有效的办法就是把 conda 的软件源指向国内镜像。目前比较稳定、社区使用最广泛的是清华大学的开源软件镜像站。5.2 命令行配置清华镜像源在终端里逐条执行以下命令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 的频道列表里conda 会优先从这些频道下载包最后一条是设置show_channel_urls为yes这样你在安装包的时候能看到它是从哪个源下载的方便排查问题。顺手把 pip 的源也换成国内的在终端执行pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这样以后用pip install装包也会走国内镜像速度提升非常明显。5.3 conda 配置文件 .condarc 的正确写法命令行配置最终会写入用户目录下的~/.condarc文件。如果你喜欢直接改文件也可以手动编辑它nano ~/.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 msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud这里default_channels主要针对defaults频道custom_channels则是一些常用社区频道比如conda-forge和pytorch。修改完成后执行conda clean -i清理一下索引缓存然后重新执行安装命令时下载速度就会有质的提升。5.4 换源后依然报错的排查思路换源之后如果还是出现CondaHTTPError不要急着认为镜像源没用。按经验来说可能是这几个方面的问题第一检查网络环境看能否访问镜像站。终端里执行curl -I https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/看返回的 HTTP 状态码是不是 200。第二检查.condarc格式是否正确YAML 对缩进很敏感一个多余空格都可能导致解析失败。第三如果公司网络或者校园网本身有认证镜像站虽然能访问但域名解析出问题可以尝试换成https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main不带末尾的斜杠或者改用其他镜像站比如阿里云的源。6. 卸载 Anaconda用不上的时候怎么干净移除6.1 什么时候需要卸载可能有人觉得装都装了为什么要卸载实际上我遇到过几种情况装错了版本比如下载了 ARM64 包后想换 x86_64、公司要求统一用 Miniconda、或者环境彻底被自己搞坏了不想排查干脆重装。这时候如果能干净地卸载后面重新安装会省很多事。6.2 使用官方清理工具 anaconda-cleanAnaconda 官方提供了清理工具在卸载之前先执行这个工具可以备份或删除配置文件。首先安装清理工具conda install anaconda-clean然后执行清理anaconda-clean --yes--yes参数表示对所有确认提示都回答 yes省略这个参数的话每删一个文件都会问你一次效率很低。执行完这条命令之后它会自动把~/.condarc、~/.conda、~/.continuum这些配置目录备份到同名的.backup目录下。6.3 删除主目录并清理 shell 配置清理完配置文件之后删除 anaconda 主目录rm -rf ~/anaconda3然后打开~/.bashrc找到安装时 conda 自动追加的那段初始化代码大约在文件末尾内容是# 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 把这一整段从# conda initialize 到# conda initialize 删除。如果之前在~/.bashrc里手动添加过export PATH那行 conda 路径也要一并删掉。最后执行source ~/.bashrc让配置生效。6.4 卸载彻底不彻底怎么验证清理完成后关掉当前终端重新打开一个新的终端窗口输入conda --version如果提示command not found说明 conda 已经从你的 PATH 和 shell 配置里彻底移除了。再执行echo $PATH | tr : \n | grep -i anaconda如果没有任何输出说明 anaconda 相关的路径已经不存在于 PATH 中了。这个时候系统就恢复到了没装 Anaconda 之前的状态。7. 我在安装与使用中踩过的坑和最终解法7.1 conda 命令找不到环境变量配置错误是重灾区这是我在网上看到出现频率最高的问题。很多人装完 Anaconda 之后输入conda --version得到command not found第一反应就是感觉安装失败了。其实大概率是环境变量没有配好。排查思路是这样的先看/home/你的用户名/anaconda3/bin/conda这个文件是否存在如果存在说明安装没有问题问题出在 PATH 配置上。检查~/.bashrc里有没有 conda 相关的配置如果完全没有就手动补上。如果文件中存在配置但还是找不到有可能是执行配置时当前 shell 没有重载跑一下source ~/.bashrc即可。有些人可能会把export PATH/home/用户名/anaconda3/bin:$PATH写成export PATH/home/用户名/anaconda3/bin注意这里少了:$PATH这意味着你完全把原有的 PATH 覆盖了执行之后终端里面ls、nano这些基础命令会全部失效非常危险。我见过有朋友在配置的时候手滑写成这种形式然后终端基础命令全挂只能通过绝对路径去调用命令来修复。所以配置 PATH 的时候$PATH一定要保留。7.2 安装程序卡在 loading applications 不动这个问题在部分配置较低的机器上比较常见。Anaconda 安装脚本执行到最后会有一个loading applications阶段它需要扫描系统中已有的应用程序来建立关联。如果机器内存不足或者磁盘 IO 性能较差这一步可能会卡很久。我的建议是耐心等 3 到 5 分钟如果确实没有反应可以考虑强制中断安装然后重来或者换用 Miniconda。另外如果你是在虚拟机里安装 Ubuntu建议在安装 Anaconda 之前给虚拟机多分配一些内存和 CPU 核心这个阶段的卡顿概率会明显降低。7.3 激活环境时出现 warning 提示有朋友在激活 conda 环境时终端会输出一段提示WARNING: A conda environment already exists at xxx这种提示通常出现在你切换环境或者重启系统后。原因一般是当前目录下的.conda缓存信息与实际的 conda 环境配置存在不一致或者是之前直接复制过整个anaconda3目录到另一台机器导致环境路径记录的是旧机器的路径。解决办法是清理 conda 的缓存conda clean --all如果问题依然存在检查环境配置文件中记录的路径/home/你的用户名/anaconda3/envs/环境名/conda-meta下的文件确认其中记录的路径是否与当前实际安装路径相符。7.4 默认进入 base 环境想关掉自动激活怎么做装完 Anaconda 之后打开终端默认就会进入(base)环境这是正常现象。原因在于安装脚本在~/.bashrc里自动加入了 conda 初始化逻辑默认激活了 base 环境。如果你不想每次打开终端都自动进入 base可以执行conda config --set auto_activate_base false设置完之后重启终端就不会再有(base)前缀了。想激活环境的时候再手动执行conda activate 环境名就行了。这个配置不少人喜欢保留默认 true特别是做数据分析的人因为 base 环境本身已经预装了很多常用库打开终端直接用。但如果你注重干净或者主要在虚拟环境里工作关掉自动激活体验更好。7.5 Solving environment 一直转圈、卡死怎么处理conda create或者conda install的时候终端停在Solving environment阶段长时间不结束这是另一个高频问题。根本原因是 conda 的依赖求解器在处理依赖关系时计算量很大尤其在默认源很慢或者有大量包需要解析索引的情况下。一个有效解法是切换 conda 的求解器使用 libmamba 求解器它比默认的 classic 求解器快很多。执行conda update -n base conda conda install -n base conda-libmamba-solver conda config --set solver libmamba配置完之后再跑conda install时你会发现依赖解析速度提升非常明显。我换了这个求解器之后之前一个要等十分钟的环境创建过程现在几十秒就能完成。还有一个相对笨但很有效的办法创建环境时直接指定具体版本号减少求解器的计算范围。比如conda create -n myproject python3.9 numpy1.24 pandas2.0一次性把所有主要包写全比分多次安装要快得多。7.6 Pycharm 怎么接入 Anaconda 环境很多用它做开发的朋友踩过连接环境的坑。在 PyCharm 里接入 Anaconda 其实很简单打开Settings-Project: xxx-Python Interpreter点击右上角的齿轮图标选择Add Interpreter-Add Local Interpreter。这里有两个选项如果是直接用 Anaconda 的 base 环境就选Conda-Existing environment然后 Interpreter 路径选/home/你的用户名/anaconda3/bin/python如果是想用之前创建的虚拟环境就把路径指向/home/你的用户名/anaconda3/envs/你的环境名/bin/python。选完路径之后PyCharm 会自动读取该环境下的包列表项目运行时就会使用 conda 环境里的 Python 解释器跟终端conda activate的效果一样。注意不要选成/usr/bin/python3否则 PyCharm 用的还是系统 Python就完全没发挥 Anaconda 的隔离作用了。7.7 关于 Anaconda 和系统 Python 共存的最后一点经验最后分享一个我觉得最容易被新手误解的地方。装完 Anaconda 之后你在终端输入python默认进入的是 Anaconda 的 Python但这不代表系统 Python 被删掉了。它们两个是并存的只是 PATH 的优先级决定了默认用哪个。要查看系统 Python 还在不在可以用绝对路径/usr/bin/python3 --version如果哪天 Anaconda 被卸载了只需要恢复 PATH 配置就能回到系统 Python不会说系统 Python 因为装过 Anaconda 就坏掉了。搞懂了这个逻辑以后你在 Ubuntu 上配置 Python 环境心里就有底了系统 Python 是系统的人Anaconda 是你自己的人两者互不干涉各干各的活。
返回列表