CentOS 7安装Anaconda3与conda命令详解

📅 发布时间:2026/10/17 13:12:52
CentOS 7安装Anaconda3与conda命令详解
这周帮一位同事排查环境问题他自己折腾了一下午把 Anaconda 装到 /usr/local 下又把 /usr/bin/python 软链到了 Anaconda 的 Python 上结果系统里 yum 直接挂掉。这类场面我见得太多了。CentOS 7 上的 Python 环境只要不是从 conda 正规初始化流程走后面大概率要出问题。这篇文章就围绕一个非常经典的操作组合展开在 CentOS 7 上安装 Anaconda3-2020.02-Linux-x86_64并把手头的 conda 基本命令讲透。内容包括安装前的版本选型逻辑、完整安装步骤、环境变量配置、conda 常用的环境与包管理命令以及我在生产环境里多次踩坑后总结的排查思路。适合刚接触 Linux 服务器的开发者、准备搭建 Python 数据环境的同学以及被 Conda 环境搞到头疼、想把原理彻底理清的人。1. 为什么推荐在 CentOS 7 上选择 Anaconda3-2020.021.1 存量服务器的真实状态CentOS 7 和 Python 2.7 的纠葛虽然 CentOS 7 已经进入生命周期的维护末期但现实是大量存量服务器依然在跑尤其是企业内部的数据分析、模型推理、自动化脚本这类场景系统稳定性优先级非常高根本不会为了追新而随意迁移系统。这类机器有一个共同特点预装的是 Python 2.7.5而且这个 Python 2.7 不能被随便替换因为 yum、部分系统监控脚本都依赖它。换句话说如果你在 CentOS 7 上需要一套干净、独立、不影响系统自带工具的 Python 环境Anaconda 是一个很合理的选择。它把 Python 解释器、常用科学计算库、包管理工具 conda 打包在一起默认安装在用户目录下从设计上就避免了对系统 Python 的破坏。这也是为什么我不建议你直接去改 /usr/bin/python正确做法是用 conda 维护一套独立环境。1.2 2020.02 不是“旧”是“稳”版本背后的兼容性逻辑很多人一看到 2020.02 就觉得这是老版本想当然去装最新的 Anaconda。这里我要多说一句Anaconda 这种发行版版本新旧不代表绝对优势兼容性才是最值钱的东西。Anaconda3-2020.02-Linux-x86_64 自带 Python 3.7.6这个版本在数据科学生态里地位很特殊。大量的旧项目、遗留代码、甚至部分生产环境的依赖清单都是基于 Python 3.7 写的比如某些深度学习框架的 1.x 版本官方支持范围只到 Python 3.7。如果你手头有一个推理项目锁定了这类老版本框架装最新版 Anaconda 反而会带来一堆兼容问题因为新版默认内置的是 Python 3.10 甚至更高。另外2020.02 这版自带 conda 4.8.2这个版本的通道解析机制、环境管理逻辑都非常成熟。我实际用下来创建环境、安装包、克隆环境的稳定性都很好极少遇到新版本偶尔出现的 solver 死等或依赖解析异常。说白了对于追求“能装、能用、不折腾”的生产环境用户这个版本本身就是一种合理选型。1.3 动手之前四项环境检查务必做掉安装之前不要急着下载先把服务器的底细摸清楚。我每次在新机器上装 Anaconda都会先走一遍这四项检查确认系统版本运行cat /etc/redhat-release确保你确实是 CentOS 7。虽然 8、9 也能安装但后面的命令细节会不同。查看磁盘空间运行df -h重点关注/home或/opt这类安装目标分区。Anaconda 安装完大概需要 3GB 到 5GB加上后续环境缓存建议至少预留 10GB。检查是否已有 conda运行which conda或者ls ~/anaconda3。如果系统里已经装过其他发行版的 conda务必先想清楚是复用还是卸载否则 PATH 冲突会很难受。检查原有 Python 状态运行python --version和which -a python看看系统默认 Python 和 PATH 里能找到哪些解释器。这一步能帮你判断当前 shell 环境有没有被之前的折腾影响。我遇到过不少新手跳过这些检查直接开装结果装了半小时后提示磁盘空间不足又或者装完后 conda 命令指向了旧版本的路径。这四项检查每条只需要几秒钟却能把大部分后期问题挡在门外。2. 从下载到安装完整实操流程与避坑记录2.1 安装包下载与校验别让安装在中途失败安装包建议从官方下载页或你们内网搭建的镜像源获取文件名是 Anaconda3-2020.02-Linux-x86_64.sh大概 470MB 左右。下载方式用 wget 或 curl 都行记得放在空间充足的目录下wget https://mirrors.example.com/anaconda/archive/Anaconda3-2020.02-Linux-x86_64.sh这里的示例地址只是占位实际请换成你能访问到的镜像源。但不管从哪里下载我强烈建议下载后先做一次完整性校验最可靠的方式是比对 SHA256 值sha256sum Anaconda3-2020.02-Linux-x86_64.sh把输出结果和官方发布页公布的 SHA256 校验值比对一致再继续。为什么这一步值得做因为网络传输过程中文件可能损坏尤其是国内直接访问海外源时我遇到过下载完的脚本体积都对但解压中途报 tar 错误的情况。如果没校验就运行通常要等到安装进度走到一半才会爆炸排查起来非常痛苦。2.2 交互式与静默式安装两种模式与实际选型Anaconda 安装支持两种模式交互式和静默式适用场景完全不同。交互式安装就是直接运行脚本bash Anaconda3-2020.02-Linux-x86_64.sh安装过程会要求你按 Enter 读完许可协议输入 yes 同意然后选择安装路径。默认是$HOME/anaconda3我个人建议普通用户就采用默认路径。最后一步会问你是否运行conda init来初始化 shell这里必须选 yes否则安装完 conda 命令根本不可用。静默安装则适合 Docker 镜像构建、批量服务器初始化这类无人值守场景bash Anaconda3-2020.02-Linux-x86_64.sh -b -p $HOME/anaconda3-b表示批量模式不交互-p指定安装路径。但注意静默安装完成后不会自动把 conda 写入 shell 环境需要手动执行一次初始化$HOME/anaconda3/bin/conda init bash关于用 root 还是普通用户安装我的经验是如果是个人开发的虚拟机root 装上问题不大如果是团队共用的生产服务器尽量用普通用户身份安装把 Anaconda 放在该用户家目录下避免污染系统的同时也不容易引发权限纠纷。对比项交互式安装静默安装适用场景手动装机、新手学习脚本自动化、容器构建是否自动写入环境变量选 yes 后自动需要手动 conda init安装路径配置交互提示通过 -p 指定推荐人群偶尔装一次需要批量重复安装2.3 环境变量与 conda init安装后最容易翻车的一步安装完成后的第一件事不是急着跑 Python而是让 conda 命令能被当前 shell 找到。如果之前交互式安装选择了初始化或者手动执行过 conda init此时只需重新加载配置文件source ~/.bashrc然后确认 conda 可执行conda --version这一步翻车率非常高常见的原因有几种第一安装完没有 source直接在旧 shell 里敲 conda结果提示找不到命令第二安装时选了自定义路径但 init 阶段没跑对第三有些人喜欢绕过 conda init 直接手动写export PATH/path/to/anaconda3/bin:$PATH这虽然能让 conda 命令跑起来但会绕开 conda 的 shell 函数初始化某些场景下会出现 activate 时行为异常。我的建议很明确不要手动 export PATH而是让 conda init 来管理。conda init其实就是在你的~/.bashrc末尾插入一段# conda initialize 的代码块里面配置了 conda 的 shell 函数和 PATH 前缀。如果你已经手动写了一条 export PATH建议打开 .bashrc 检查一下把重复的配置删掉避免多个 conda 入口互相干扰。2.4 安装完成的快速体检五条命令定位问题环境配好之后我会用一组命令快速确认安装质量这步能帮你把绝大多数潜在问题尽早暴露出来conda --version python --version which python conda env list conda list正常情况下python 版本输出应该是 Python 3.7.6which python指向~/anaconda3/bin/pythonconda env list 里有 base 环境conda list 能列出默认安装的包。如果which python指向的还是/usr/bin/python说明当前 shell 的 PATH 顺序不对需要重新检查 .bashrc。如果 conda list 输出很慢甚至卡住可能是网络问题在解析某些源可以先临时执行conda clean -i清理索引缓存再试。有个小设置我建议顺手做掉如果你不希望在打开终端时自动进入 base 环境可以执行conda config --set auto_activate_base false这样 conda 命令依然可用但不会每次登录都自动加载 base减少后续的干扰。后续想进入 base 环境手动conda activate base即可。3. conda 基本命令环境管理的核心技能树3.1 换源提速与 channel 配置下载慢的问题必须解决装完 Anaconda 之后最影响日常体验的就是下载速度。conda 默认使用的通道在国外不换源的话每次创建一个新环境都可能在等待中度过。我建议第一时间配置国内或内网镜像源。配置方式是通过 conda config 添加通道conda config --add channels https://mirrors.example.com/anaconda/pkgs/main conda config --add channels https://mirrors.example.com/anaconda/pkgs/free conda config --set show_channel_urls yes同样示例地址请替换成你自己可用的镜像地址。show_channel_urls这个参数建议打开它会在 conda list 里显示每个包具体来自哪个通道排查来源问题时非常有用。换源之后记得清理旧的索引缓存conda clean -i这里提一个细节镜像源并非越多越好通道太多会让依赖解析时间变长。保持两三个稳定通道就够了。另外如果你们公司有内网打包的专用源优先用内网源速度和稳定性都更可控。3.2 create、activate、deactivate环境生命周期管理conda 最核心的使用方式就是虚拟环境隔离。一个项目一套环境依赖之间互不干扰这一点在多人协作或者同时维护多个项目时尤为重要。创建新环境最常见的方式是同时指定 Python 版本和需要的包conda create -n py37 python3.7 conda create -n webapp python3.7 django flask-n后面跟环境名环境名建议带上项目或版本信息比如webapp-py37这种格式一眼就能看出用途。激活和退出环境conda activate webapp conda deactivate查看当前机器上有哪些环境conda env list删除环境conda env remove -n webappconda 没有直接的 “rename” 命令但可以通过 clone 加 remove 实现重命名conda create -n webapp-new --clone webapp conda env remove -n webapp一个非常重要但不常被提及的原则不要让 base 环境变成大杂烩。很多人图省事把所有项目需要的包都装在 base 里最后依赖冲突时几乎无法收拾。我自己的习惯是 base 保持最干净的状态任何项目都新建环境再装东西。3.3 install、update、remove包管理实操技巧包管理命令是 conda 的主战场基本语法如下conda install numpy conda install numpy1.18.1 conda install -n webapp requests conda update numpy conda remove requests版本指定方式要特别注意conda install numpy1.18.1里的一个等号就代表精确匹配这个版本conda 的版本语法和 pip 比较接近但更独特。如果你不确定可用版本号可以用conda search package查看通道里的历史版本。实际使用中遇到 conda 和 pip 都能装的包优先用 conda。原因在于 conda 安装的是预编译二进制包它会同时解析非 Python 的系统依赖库而 pip 只关注 Python 包依赖装某些带 C 扩展的库时可能要现场编译更容易踩到缺库的坑。对于自动化部署记得带上-y参数跳过确认conda install -y pandas matplotlib还有一个小技巧不要一次性安装太多包。conda 在解析超多依赖时可能需要好几分钟看起来像卡住了实际上是在计算依赖树。如果经常遇到这种长时间等待可以尝试把大依赖拆成小批次安装效率反而更高。3.4 环境导出、克隆与多机复制让部署不再返工环境管理里最能体现效率差距的功能是导出和复制。换一台机器或者给同事交接项目时不可能手写一遍依赖清单正确做法是导出环境描述文件。完整导出环境信息conda env export -n webapp webapp.yml这个文件里包含所有依赖包的精确版本和构建号适合完全复刻当前环境。但它的弊端是跨操作系统平台时构建号可能对不上。如果只需要记录顶层依赖导出文件会更干净conda env export -n webapp --from-history webapp.yml--from-history只会记录你实际执行过的安装指令自动去掉依赖树中的间接包。这个文件适合跨平台迁移也适合放到 Git 仓库里做版本管理。在另一台机器上恢复环境conda env create -f webapp.yml同一台机器上想快速复制环境做备份用 clone 更高效conda create -n webapp-backup --clone webappclone 之所以快是因为 conda 在同一个磁盘分区内使用了硬链接不实际复制文件数据所以备份成本极小。这个机制也提醒我们不要贸然手动删除 Anaconda 安装目录里的文件那样会破坏多个环境之间的共享数据链路。4. 安装和使用 Python 包时的常见问题与排查4.1 conda 与 pip 混用边界在哪里实际工作中conda 和 pip 混用是不可避免的因为 conda 通道里的包并不是 100% 覆盖全部 Python 生态。但混用必须讲规则否则环境会越来越乱。我的原则很简单conda 优先缺失才用 pip并且用 Python 模块方式调用 pippython -m pip install some-package为什么要用python -m pip而不是直接pip如果当前 shell 环境混乱直接执行 pip 可能调用的是别的 Python 版本对应的 pip导致包装到了错误的环境里。用python -m pip可以确保 pip 一定和当前 Python 解释器属于同一环境。混用时的另一个大忌是同一批次既跑 conda 又跑 pip。正确做法是先把 conda 能装的一次性装完然后再用 pip 补齐缺失项避免两个包管理器在依赖图上互相干扰。4.2 四个高频启动与导入问题排查使用 conda 过程中绝大多数卡壳都集中在启动、导入、路径这三个方面。我把遇到频率最高的四个问题整理出来并附上排查思路。第一个问题是“conda: command not found”。这个通常在刚安装完或者新开 shell 时出现原因是 conda 的初始化代码没有生效。解决方式很简单先执行source ~/.bashrc再试如果还不行检查~/.bashrc里是否有 conda 初始化代码块没有就手动执行~/anaconda3/bin/conda init bash。第二个问题是运行 python 时进入的是系统自带的 2.7。这本质是 PATH 优先级问题系统会找到第一个匹配的 python即/usr/bin/python。排查时用which -a python可以看到所有候选解释器。正常状态下conda 环境激活后 PATH 最前面应该是~/anaconda3/bin如果不是大概率又是手动 export PATH 和 conda init 冲突了。第三个问题是激活环境后 import 某个包却报 ModuleNotFoundError。先确认环境确实激活了再看conda list里有没有这个包。如果包确实存在但依然报错用python -m pip install重装一次很可能是包安装时没有同步到当前环境。第四个问题是脚本里执行 conda activate 失败。conda activate 其实是一个 shell 函数不是可执行文件所以非交互式 shell 默认不加载这个函数。在脚本里需要先执行source /path/to/anaconda3/etc/profile.d/conda.sh再执行 conda activate 才能生效。4.3 磁盘空间失控与离线环境下的包安装思路Anaconda 用得越久磁盘占用增长得越厉害。这里面最占空间的是pkgs缓存目录也就是下载过的包安装包会被缓存下来。定期清理非常必要conda clean --tarballs conda clean --packages嫌麻烦可以用组合参数全部清理conda clean --all清理索引缓存conda clean -i再说一个常见场景内网隔离的机器无法访问外网这时候怎么装包如果只是软件环境整体迁移推荐用 conda-pack 打包。这个方法我在多台离线服务器上验证过非常稳定conda install -c conda-forge conda-pack conda pack -n myenv -o myenv.tar.gz把打包文件拷到离线机器后解压并激活mkdir -p ~/myenv tar -xzf myenv.tar.gz -C ~/myenv source ~/myenv/bin/activate注意 conda-pack 只适合同平台迁移比如同为 Linux x86_64 且 glibc 版本相近。跨更大的系统版本差异时最好先确认基础库兼容性再做。5. 生产环境经验谈我的最终建议与工作习惯5.1 安装路径与权限规划普通用户还是共享服务器单人使用的机器安装在普通用户家目录下最省心比如$HOME/anaconda3。这个位置权限由该用户自己控制安装过程也完全不需要 sudo隔离性最好。如果是多人共用的服务器建议安装到共享目录比如/opt/anaconda3然后为使用 Python 环境的团队成员分配单独的用户组通过组权限控制读写范围。这种做法要让所有成员共享同一个 conda 程序再各自维护自己的虚拟环境目录。无论哪种模式都不建议把 Anaconda 装到/usr/local目录下。这个目录和系统二进制文件混在一起容易让 shell 分辨不清 Python 来源。我在开头提到的同事项目就是把 Anaconda 装到了/usr/local然后又用软链接替换了系统 Python最终把 yum 搞坏。这类事故其实完全可以通过路径规划避免。5.2 常用 conda 操作速查小抄日常运维里我会在每台机器的家目录放一个简单的操作速查表方便自己和同事快速查阅。这里也分享出来需求命令查看 conda 版本conda --version查看环境列表conda env list创建 python 3.7 环境conda create -n env_name python3.7激活环境conda activate env_name退出环境conda deactivate安装包conda install package_name锁定版本安装conda install package_name1.18.1查看已安装包conda list删除环境conda env remove -n env_name导出环境conda env export -n env_name env.yml导入环境conda env create -f env.yml另外两个我很常用的配置项再次强调一下conda config --set auto_activate_base false conda config --set show_channel_urls yes前者控制 base 环境是否自动激活后者控制是否显示包来源通道。这两项配好后日常使用的干扰会少很多。5.3 避免重装系统的两条血泪经验最后聊两条我亲身经历换来的经验。第一绝对不要动/usr/bin/python。CentOS 7 的 yum 和一些系统管理工具硬性依赖系统自带的 Python 2.7一旦这个解释器被替换或破坏系统的包管理功能直接瘫痪。想要使用 Python 3安装 Anaconda 后用 conda 环境就好不要去动系统原生的内容。第二如果 conda 环境真的坏了先尝试回滚不要急着删掉重装。conda 其实内置了环境历史回滚功能conda list --revisions conda install --revision NN是回滚到的历史版本序号。这个功能知道的人不多但它能救回大量因安装错误包而濒临崩溃的环境。我就在生产环境上成功回滚过一次省去了整整一个下午的重装时间。从整体来看CentOS 7 搭配 Anaconda3-2020.02 的组合确实不算新但在无数存量服务器上它依然是最稳定、最省心的 Python 环境方案。把 conda 的基本命令用熟练配合谨慎的路径规划和环境隔离习惯这套流程可以在你的运维和开发工作中长期保持稳定减少很多不必要的折腾。