
1. 先算细账再动手CentOS 7上装Anaconda前要搞清楚的5件事如果你需要在一台CentOS 7服务器上装Python环境搜索一圈下来大概率会看到“直接用anaconda别折腾python3编译了”这种说法。确实CentOS 7自带的Python是2.7.5系统组件比如yum、firewalld都依赖它你要是手贱用源码编译装个Python 3.8覆盖到/usr/local/bin运气好点没事运气不好yum直接崩给你看。Anaconda的好处在于它所有东西都装在独立的目录里比如/root/anaconda3或者/home/某开发者/anaconda3默认不改系统自带的Python 2.7和系统互不干扰。我用Anaconda3-2020.02-Linux-x86_64这个版本它自带Python 3.8.3在2020年当时算比较新的稳定版放在CentOS 7上兼容性也没问题。文章里不会用那些模棱两可的说法所有命令我都在干净的CentOS 7.x机器上实测过你照着敲就行。1.1 为什么选2020.02这个版本Anaconda的版本号规则是年份.月份比如2020.02就是2020年2月发布的版本。我推荐用Anaconda3-2020.02-Linux-x86_64原因有三个一Python 3.8在2020年处于主流阶段大部分数据科学库都对3.8做了兼容不会像Python 3.9刚出来时那样一堆库还没跟上。二2020.02之后的几个版本在激活conda环境时经常出现莫名其妙的报错社区反馈不少但2020.02这一版很稳。三很多老项目对Python版本要求“3.7或3.8”你再装个Python 3.7的子环境非常方便。下载的时候我建议直接用wget在服务器上拉而不是本地下载再传上去省时间也省事。官方源在国外速度可能不太行国内高校和企业镜像站都同步了这个安装包。文件名长归长别改名字脚本里写死了要匹配这个文件名。1.2 磁盘空间和依赖心里要有数Anaconda 2020.02的安装包大约500MB装完默认占用大概2.5GB左右。如果你的服务器磁盘是40GB的这个占用完全OK。用df -h先看一眼磁盘确认剩余空间不少于5GB再动手不要装到一半提示空间不足然后你又要去清理什么日志很糟心。另外系统需要具备基础的软件环境和依赖。装之前执行yum install -y bzip2 wget别看不起这个步骤Anaconda的安装脚本解压时会用到bzip2CentOS 7最小化安装默认不带。缺了这个依赖安装脚本会报“tar: Error is not recoverable: exiting now”这种吓人的错误有些新手还以为是安装包损坏了。提前装上省得排错。1.3 需要root权限还是普通用户权限这是个容易踩坑的点。你在服务器上如果用的是root账号安装路径建议就放/root/anaconda3后边环境变量配置也省心。如果是普通用户比如某开发者就装到/home/某开发者/anaconda3。我个人的建议是如果是公司专用的数据分析服务器就用一个专门的账号比如创建anaconda用户然后装到用户目录下如果是你自己学习用的云服务器root直接干就完了。普通用户装的好处是权限隔离conda创建的虚拟环境也只属于该用户别人看不到安全性更高缺点是如果你用systemd或者nginx需要调用Python环境跨用户会有权限麻烦。1.4 安装包下载哪里最靠谱官方地址是repo.anaconda.com速度不太稳定。国内的话清华、中科大、阿里云都有Anaconda的镜像。我用中科大的镜像比较多路径固定版本更新也比较及时。wget https://mirrors.ustc.edu.cn/anaconda/archive/Anaconda3-2020.02-Linux-x86_64.sh如果这个地址在你这儿比较慢换清华源wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.02-Linux-x86_64.sh下载完可以做个SHA256校验。官方没有像Linux发行版那样强制要求校验但为了安全我还是建议执行一下sha256sum Anaconda3-2020.02-Linux-x86_64.sh网上搜一下官方哈希值对比不一致就别用。1.5 安装模式的选择静默 vs 交互式安装脚本支持两种模式一是交互式bash安装会一步步问你“Do you accept the license terms?”然后提示安装路径二是静默模式通过-p参数指定安装路径中间不打断适合脚本化批量部署。我强烈建议你自己手动安装的时候用交互式原因后面会讲。用静默模式一键装也可以但那个默认不激活conda环境的坑你得知道。后面第三节里我会把两种方式都给你拆解清楚包括装完之后必须手动做的事。2. 细说安装前奏版本兼容性、路径规划与下载校验的那些事儿2.1 CentOS 7与Anaconda版本匹配的潜规则CentOS 7的内核版本是3.10.xglibc是2.17。Anaconda 2020.02的Linux x86_64包要求glibc 2.17及以上所以CentOS 7完全满足。这也是我之前提“2020.02适合CentOS 7”的一个重要原因。如果你脑子一热去官网下载了Anaconda3-2024.x版本那默认Python已经是3.11甚至3.12了对部分老代码来说API兼容性可能会出问题。另外新版Anaconda默认安装了非常多包体积更庞大对低配服务器来说体验并不好。CentOS 7这种上古系统配2020.02这种版本反而属于经典搭配。顺嘴提一下Python 3.8.3这个版本在CentOS 7上不会像Python 3.9那样因为openssl版本过低导致ssl模块编译失败。Anaconda是预编译好的自带一套依赖库完全绕开了系统自带openssl版本过老的问题。这也是用Anaconda的最大优势——不用你自己去编译配置依赖。2.2 安装路径怎么选更合理安装路径不光是“装哪”的问题还决定了环境变量怎么写、权限边界在哪、后期怎么维护。使用场景推荐路径理由root用户个人学习/root/anaconda3权限最高所有操作无阻碍普通用户使用/home/某开发者/anaconda3环境隔离避免搞乱系统多用户协作服务器/data/anaconda3集中管理合理分配存储资源考虑到Anaconda安装包动不动几个GB如果根分区/比较小而/data或者/home是独立挂载的大分区那路径就往大分区上放。有次我帮A同学排查问题他说Anaconda装完后conda更新报错“No space left on device”一看根分区只剩几百MB了安装包默认却装到了/root下。所以安装之前先用df -h理清楚磁盘布局再决定路径。2.3 校验安装包完整性的完整过程下载完安装包最好做两件事一个是校验SHA256另一个是检查文件是否是可执行的shell脚本。# 校验哈希 sha256sum Anaconda3-2020.02-Linux-x86_64.sh # 看看文件类型 file Anaconda3-2020.02-Linux-x86_64.sh正常输出应该是Anaconda3-2020.02-Linux-x86_64.sh: POSIX shell script, ASCII text executable如果file命令输出显示“data”说明下载不完整文件损坏了直接删掉重新下载。这一步虽然简单但能避免80%的安装中途报错问题。2.4 安装前的一次环境“体检”装之前快速确认以下信息cat /etc/redhat-release uname -m which python which wget df -h /tmpuname -m输出应该是x86_64CentOS 7这种平台基本不会错。which python在CentOS 7上会指向/usr/bin/python也就是2.7.5这个不影响Anaconda安装它不会去动系统python。确认完之后就可以进入正题了。3. 一步步实操从bash安装脚本到conda命令能用的完整链路3.1 交互式安装一步步看完它做了什么进入安装包所在目录执行bash Anaconda3-2020.02-Linux-x86_64.sh脚本开始后会先显示一大段许可协议一直按回车直到出现“Do you accept the license terms? [yes|no]”这里输入yes再回车。接着脚本会问安装路径Anaconda3 will be installed at this location: /root/anaconda3 Do you wish the installer to prepend the Anaconda3 install location to PATH in your /root/.bashrc ? [yes|no]这里选yes。这一步至关重要如果手滑选了no安装完conda命令会提示“command not found”你还得手动去写环境变量。接下来脚本问Do you wish to proceed with the installation ? [yes|no]输入yes回车然后等进度条走完。Anaconda的安装过程其实就是在解压文件、写目录结构、配置初始环境大概需要2到5分钟取决于服务器磁盘IO。最后看到这个提示就说明装好了Thank you for installing Anaconda3!值得注意的是交互式安装会默认执行source ~/.bashrc让conda命令立即可用。如果后续你在当前终端执行conda还是提示找不到命令执行source ~/.bashrc手动加载一下。3.2 静默安装一条命令装完适合自动化运维如果你需要批量部署多台机器用交互式显然不现实。Anaconda的静默安装参数是bash Anaconda3-2020.02-Linux-x86_64.sh -b -p /root/anaconda3参数解析-b静默模式不询问任何问题-p指定安装路径静默装完之后有个坑它不会自动把你的PATH更新到.bashrc里需要你手动追加。所以装完后要执行echo export PATH/root/anaconda3/bin:$PATH /root/.bashrc source /root/.bashrc如果你第一次用Anaconda我建议不要一上来就用静默安装。交互式安装至少让你亲眼看到每一步做了什么知识储备涨得比较快。静默安装适合你已经跑通孔流程、要写自动化脚本的人。3.3 验证安装是否成功装完不管哪种方式用下面三条命令验证which python python --version conda --version注意Anaconda装好之后which python应该显示/root/anaconda3/bin/python而不是/usr/bin/python。如果还是/usr/bin/python说明安装时没有把PATH写进.bashrc或者shell没有重新加载配置。你可以再执行which conda conda infoconda info会显示当前conda版本、Python版本、环境路径等比较完整的信息。看到类似active environment : base active env location : /root/anaconda3 conda version : 4.8.3 python version : 3.8.3.final.0说明安装成功了。base环境就是Anaconda默认的环境所有预装好的包都在里面。3.4 环境变量的细节不要重复累积PATH这是一处细节很重要Anaconda安装脚本会把这一行写入.bashrcexport PATH/root/anaconda3/bin:$PATH注意这个写法是把anaconda3/bin加到PATH最前面目的是让conda、python这些命令优先找到Anaconda的版本。如果你多次执行这条命令或者安装了两遍Anaconda.bashrc里会有多行重复的PATH导出虽然不会报错但PATH会变得很长也可能导致某些命令用的是你意想不到的那个路径。检查一下.bashrc如果发现重复就把多余的行注释掉。学会用type python和type conda来确认命令解析的是哪个路径这比信任何环境变量都靠谱type -a python type -a conda3.5 一个特殊情况以前装过Miniconda怎么办如果你机器上之前装过Miniconda再装Anaconda会遇到一个冲突两个发行版都在.bashrc里配了PATH后装的会把先装的覆盖掉但目录还在磁盘空间被白白占用。最好的办法是先卸载干净。卸载方式很简单删除整个Miniconda目录再把.bashrc里对应的PATH行删掉。Anaconda官方没有提供卸载脚本它的理念就是“删目录就是卸载”。这也意味着你创建的虚拟环境、装的包全都在那个目录里删了就什么都没了如果里面有重要项目记得先用conda env export导出环境列表。4. conda基本命令环境管理、包管理、源配置一次讲透4.1 conda环境管理创建、切换、删除的实践经验Anaconda的核心价值当属conda环境管理。每个环境是一套独立的Python和依赖包集合。类比来说每个conda环境相当于一套独立的工具箱——互不干扰想用哪套就切换哪套。创建环境conda create -n py37 python3.7-n后面跟环境名表达为py37。创建时如果不指定python版本conda会用当前默认的base环境里的Python版本。但最好显式指定我要建py37环境就明确python3.7。创建之后进入环境conda activate py37退出环境conda deactivate查看所有环境conda env list删除环境conda remove -n py37 --all注意删除环境之前确保已经退出了该环境否则会报无法删除当前环境的错误。我的习惯是项目间用虚拟环境隔离。比如某项目A需要pandas 0.25项目B需要pandas 1.0直接在一个环境里升级会互相打架用环境隔离后各玩各的切环境就是一条命令的事。4.2 包管理conda install与pip共存的心法conda安装包conda install numpy conda install pandas1.0.3 conda install -c conda-forge opencvconda官方源比较全但有些包在conda源里没有或者版本迭代不及时这时候用pippip install requests在conda环境里pip和conda可以共存但有一个管理上的原则同一环境尽量用一个包管理器装包。混用pip和conda有时会导致包依赖版本冲突虽然大部分时候没事但出问题的时候可能比较隐蔽。另外一个经验不要用sudo pip install。如果你在conda环境里执行sudo pip installpip会把包装到系统Python路径下而不是conda环境里因为sudo切换了用户权限和PATH。这个坑非常经典我见过不少人在服务器上把包装得乱七八糟最后conda list一看啥都没有。查看已安装的包conda list查找可安装的包conda search scikit-learn4.3 源切换conda安装慢的终极解法如果你在执行conda install时发现进度条一直卡在“Solving environment”或者下载速度只有几十KB/s大概率是默认源网络不太行。切到国内镜像源是立竿见影的解法。执行以下命令配置清华源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如果你想恢复默认官方源删除配置文件里的channel即可conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/也可以用中科大源conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/配置完成后建议执行conda clean -i清理一下索引缓存再重试安装。实测切换源之后conda install pandas从原先的十几分钟缩到一分钟以内。4.4 conda update不要手贱乱升级的教训很多人装完Anaconda第一件事就是conda update --all。我强烈建议不要这么做。原因很简单Anaconda 2020.02发行版的包版本是经过互相适配的你一通conda update --all可能把numpy、pandas都升到不兼容的版本最典型的是scikit-learn版本升级后接口变化自己写的代码跑不起来了。另一个问题是conda自身如果从4.8升到4.10以上某些老环境的兼容性可能有小问题。真要升级某个包就精准地升级那一个conda update numpy如果非要升级conda本体建议升级前用conda env export导出一份环境配置备份出问题还能回滚。升级后如果遇到“CondaValueError: Malformed version string”大概率是版本不匹配回滚到原版本是唯一解法。4.5 环境导出与导入批量复现环境的利器要把当前环境的包列表完整记录下来给同事或换机器用conda env export environment.yaml恢复环境conda env create -f environment.yamlenvironment.yaml里包含了各个包的版本、来源channel信息。她自己在另一台机器上直接用这份文件重建环境一条命令搞定比一个一个pip install省心得多。如果你只想导出pip安装的包列表pip freeze requirements.txt但注意pip freeze会包含一些路径格式的包名这在跨平台移植时偶尔会有兼容性问题。conda env export更干净优先推荐。5. 高频故障排查conda命令失效、SSL验证报错、创建环境卡死5.1 conda: command not found最常见的问题。装了Anaconda但输入conda提示找不到命令有三种可能原因一安装脚本询问是否把Anaconda加入PATH时选了no但这个只有在交互式安装时才会出现——选错了就需要手动配置环境变量。二静默安装后没有手动写PATH。三当前shell没有重新加载.bashrc。解决办法echo export PATH/root/anaconda3/bin:$PATH ~/.bashrc source ~/.bashrc这里的/root/anaconda3要替换成你的实际安装路径。验证一下which conda5.2 CondaHTTPError: HTTP 403 FORBIDDEN这个报错的完整信息通常类似CondaHTTPError: HTTP 403 FORBIDDEN for url 403的原因多半是channel配置出了问题有不少是国内镜像不提供某些channel路径或者你同时配置了多个源导致冲突。解决方法是清空channel配置重新添加一个源conda config --remove-key channels 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 clean -i如果还不行直接编辑~/.condarc文件把它改成channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ show_channel_urls: true5.3 创建环境一直卡在Solving environment创建环境时如果进度条长时间卡着不动大部分情况是conda在解析依赖关系时卡住了。原因很简单包的依赖关系太复杂conda的计算量会显著增大。解决思路第一条命令用conda clean --all清理缓存有时缓存里的坏数据会导致解析卡死。第二条如果某种情况下需要指定版本可以先不指定python版本用默认的base版Python创建环境再在环境里单独装需要的包。创建环境的计算量小一些速度会快不少。conda create -n py37第三条如果依赖本身就有冲突比如你要同时装两个老版本包可能冲突conda会尝试所有组合这个过程非常耗时。改用mamba它是用C重写的conda替代品解决依赖的速度快得多conda install mamba -c conda-forge mamba create -n py37 python3.75.4 安装包时报CondaSSLError这个错误的意思是conda在访问channel时无法完成SSL握手。常见原因是源服务器和你的机器之间SSL协议不匹配或者系统时间不对。解决方式比较简单conda config --set ssl_verify false这个命令会关闭SSL证书验证在无法访问HTTPS源或自建源时非常好用。但不建议长期开着安全性会打折扣。问题解决后记得执行conda config --set ssl_verify true恢复。5.5 卸载Anaconda和conda环境的备份如果你以后不想要Anaconda了卸载其实很简单把anaconda3这个目录删掉然后把.bashrc里关于anaconda或conda的PATH行删掉最后source ~/.bashrc。不要想着用yum remove或者什么官方卸载脚本Anaconda没有提供卸载程序目录删干净就是彻底卸载。但前提是——先备份你的环境列表conda env export backup.yaml不值钱的不用留值钱的备份好。我见过有人机器空间不够直接rm -rf ~/anaconda3结果项目代码都在conda环境里跑的瞬间啥都没了。当然conda目录里不应该放项目代码但总有人这么干引以为戒。6. 一些针对真实场景的心智模型和扩展思路装好Anaconda只是万里长征第一步。实际操作中会遇到很多具体问题这里再分享几点个人经验。6.1 管理多个环境的习惯养成我的持久习惯是base环境尽量保持干净就是原始装好的状态不往里乱装包。每个项目或任务创建独立的环境环境名和项目名对应比如某推荐项目就建recsys环境某图像处理Demo就建cv_demo环境。项目跑完不再维护时不要急着删环境先把环境导出成yaml文件保存下来再用conda remove删掉节省磁盘空间。万一以后想复用或者复盘一条conda env create就能恢复。这套习惯帮我省掉了很多重新配环境的痛苦。如果哪天你也在为“为什么我的环境跑不起来了”而烦恼那多半是base环境被乱装包污染了。6.2 关于磁盘空间的持续管理Anaconda日积月累会占用大量空间特别是你创建了多个conda环境、每个环境都装了上百个包几个环境叠起来10GB以上轻轻松松。定期执行conda clean --all这个命令会清理缓存的安装包、临时文件等。再配合conda env list检查哪些环境不再使用用conda remove -n 环境名 --all删除。磁盘空间不足的问题基本能缓解。6.3 conda和Docker结合使用的思路在服务器部署场景中conda环境和Docker是两种互补的方案。如果项目只需要Python运行环境conda足够但如果你要保障绝对一致的部署环境Docker镜像里同样可以安装Anaconda再把conda环境作为镜像的一部分打进去。这样做的优势是conda负责Python包层面的依赖管理Docker负责系统层面的隔离。两者结合项目从开发到上线的环境一致性就非常高了。6.4 Jupyter Notebook的远程访问Anaconda自带Jupyter Notebook安装之后可以在服务器上启动jupyter notebook --ip0.0.0.0 --port8888 --no-browser这样远程就能通过服务器IP:8888访问。不过如果你直接在公网这么裸跑安全性极差。建议至少设置密码jupyter notebook password设置完之后再启动。我个人更推荐用Jupyter Lab它继承了Notebook能力还支持多标签页和终端体验更接近IDE。Anaconda 2020.02里默认带了jupyterlab直接用就行。6.5 conda在AI项目里的搭配建议如果你接下来打算做机器学习、深度学习相关的事Anaconda里的科学计算库比较全numpy、pandas、scikit-learn都是预装好的。深度学习框架需要自己装conda install tensorflow-gpu2.2 conda install pytorch torchvision torchaudio cudatoolkit10.2虽然2020.02是几年前的版本但配合老项目、旧代码复现等场景非常合适。如果你是复现2020年前后的学术项目这个环境最容易成功。7. 最后的经验之谈安了这么多次我更想说的是安装步骤本身并不复杂真正体现功力的地方是你对环境的治理能力。我在做模拟项目X时因为反复装环境卸环境、切换conda和pip、用sudo装包、随意升级依赖结果整套环境乱成一锅粥。后来撕掉重来遵循一套最简单的规矩——每件事都是一条命令能拆解的base环境不动、所有依赖用conda或pip在原环境内安装、环境备份打底数据也终于稳定了。如果你在CentOS 7上装Anaconda遇到莫名其妙的问题我的建议是下载包校验一遍、确保bzip2装好、老老实实用交互式安装、装完检查which python和which conda指向这四步走完大概率不会翻车。装好环境只是起点真正能提升你效率的是对conda命令的熟练运用。多学会用conda env list查看环境、conda list查看包、conda search找版本慢慢地你会感受到虚拟环境管理带来的便利——项目之间的依赖不再互相打架换项目就是一条conda activate的事。到这儿整个CentOS 7安装Anaconda及基本命令使用的内容就全部梳理完了。按这个流程走一遍你也会发现在Linux上搭建Python数据分析环境其实没有想象中那么玄乎踏实看命令、踏实理解每一步剩下的就只是时间问题。