
废话不多说直接上干货。最近在几台Ubuntu 18.04的机器上反复折腾Anaconda把下载、安装、配置、换源、建环境、配PyCharm整套流程走了一遍又一遍其间踩了无数坑也顺手解决了不少搜不到答案的怪问题。趁着印象还热乎把这套“从零到能跑pytorch、能接PyCharm”的完整流程整理出来。这篇文章适合所有想在Ubuntu 18.04上从头搭建Python环境的人不管你是做深度学习、数据处理还是机器人相关的开发按照下面的步骤走一遍基本不会出大问题。1. 安装前的准备工作与版本选择1.1 为什么选择Anaconda而不是Miniconda先说个很多人纠结的问题到底装Anaconda还是Miniconda我的建议是如果你不是特别清楚自己只需要conda这个包管理器那就直接装Anaconda。Anaconda自带了一大批常用的数据科学库numpy、pandas、scipy、matplotlib、jupyter等装完直接能用省去了大量逐个安装和排查依赖的时间。Miniconda虽然轻量但装完啥都没有后续每个包都要自己装尤其是你在终端里敲命令不熟练的情况下很容易在依赖地狱里出不来。打个比方Anaconda相当于一个精装修的房子拎包入住Miniconda是毛坯房所有东西都得自己添置。对于要在Ubuntu 18.04上做开发的人来说精装修省下的时间可以用来干正事。1.2 版本选择与下载渠道详解关于版本这里有个容易搞懵的地方。Anaconda官方现在下载页面上默认推荐的是Python 3.11或更高版本的安装包但是Ubuntu 18.04自带的glibc版本比较老如果你安装的Anaconda版本太新启动时可能会报GLIBCXX相关的错误。这一点后面会详细讲。我在几台机器上实测下来Ubuntu 18.04上最稳妥的选择是Anaconda3-2023.09-0这个版本内置Python 3.11或者Anaconda3-2022.05内置Python 3.9。这两个版本在18.04上运行都很稳定兼容性好而且对应版本的PyTorch、TensorFlow都能正常安装。下载方式有两种我强烈建议优先用清华镜像# 清华镜像源推荐速度快且稳定 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.09-0-Linux-x86_64.sh # 官方源不推荐国内下载速度极慢且容易中断 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh这里有个细节清华镜像的archive目录里存了从老到新的所有版本安装包如果你想找特定版本直接浏览器打开https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/按文件名排序就能看到全部版本列表。文件名里的日期编号就是版本号比如2023.09代表2023年9月发布的版本。下载之前先确认一下系统架构现在绝大多数电脑都是x86_64uname -m # 输出 x86_64 就选 Linux-x86_64.sh # 输出 aarch64 就选 Linux-aarch64.shARM架构比如树莓派、部分服务器1.3 安装前的系统清理与依赖检查在正式安装之前建议先检查系统里是否有残留的Python环境或旧的Anaconda。这个很重要很多人的问题就出在这里。如果你之前装过Anaconda但想重装先彻底卸载干净否则新版和老版的配置会互相干扰。检查一下系统自带的Pythonpython3 --version which python3如果系统自带的python3版本是3.6这是Ubuntu 18.04的默认版本没有关系Anaconda安装后会自动接管python命令不会影响系统自带的python3。系统自带的python3.6不能删因为Ubuntu的很多系统工具比如apt依赖它。另外安装之前建议先更新一下系统依赖sudo apt update sudo apt install -y libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6这些是Anaconda图形界面如果需要用到ANACONDA-NAVIGATOR和部分科学计算库的底层依赖不装的话后续可能会遇到莫名其妙的问题。这个步骤网上很多教程都没提到但我实测下来跳过这步直接装后面启动Navigator或跑某些可视化程序时会报错补装之后问题就没了。2. 正式安装Anaconda全流程2.1 安装脚本的执行与选项解读下载完成后先验证一下文件的完整性避免下载过程中文件损坏# 对比SHA256校验值官方或清华镜像页面会提供 sha256sum Anaconda3-2023.09-0-Linux-x86_64.sh确认无误后给安装脚本赋予执行权限并运行chmod x Anaconda3-2023.09-0-Linux-x86_64.sh bash Anaconda3-2023.09-0-Linux-x86_64.sh接下来安装程序会进入交互式提示这里全程需要注意几个选择第一个提示是欢迎信息直接按回车继续。 第二个提示是许可协议会显示一大段License文本按q跳过阅读协议然后输入yes接受。 第三个提示是安装路径这里有个关键点[/home/你的用户名/anaconda3] 默认会安装到你的home目录下的anaconda3文件夹。这个默认路径建议不要改因为后续很多配置和环境变量都是基于这个路径写的。如果你非要用别的路径也会面临权限问题还要额外配置权限多一事不如少一事。接下来是核心选项是否执行conda init。Do you wish the installer to initialize Anaconda3 by running conda init? [yes|no]这里一定要输入yes。conda init会自动帮你把Anaconda的初始化脚本写入~/.bashrc这样每次打开终端就能直接用conda命令。如果这里选了no后面就得手动配置PATH环境变量多走弯路。2.2 安装后立即验证安装是否成功安装完成后终端里会提示Thank you for installing Anaconda3!。此时需要让配置生效source ~/.bashrc然后验证是否安装成功which python # 输出 /home/你的用户名/anaconda3/bin/python 就对了 python --version # 输出 Python 3.11.x 就对了 conda --version # 输出 conda 23.x.x 就对了有一个很多人都遇到过的现象source ~/.bashrc之后终端提示符前面会多出一个(base)字样这说明conda的base环境已经自动激活了这是正常的说明安装成功。如果你在终端里输入conda提示command not found不要慌大概率是conda init那步没生效。手动执行一下# 如果是在安装时选择了no执行下面这条命令 ~/anaconda3/bin/conda init bash # 然后再刷新配置 source ~/.bashrc2.3 关于自动激活base环境的争议与建议安装完成后每次开终端都会自动进入(base)环境这是Anaconda的默认行为。有不少人不喜欢这样觉得每次开终端都多一个(base)前缀很碍眼。这里我给你两个选择如果想让终端恢复清爽不想自动激活baseconda config --set auto_activate_base false这条命令写入了~/.condarc配置文件以后开终端不会自动进入base环境了。要用conda的时候手动执行conda activate base或conda activate 环境名。但我个人的建议是先保持自动激活不要关。因为很多新手会忘记自己当前在哪个环境里导致pip install装了半天装到了系统Python而不是conda环境里非常容易踩坑。等你对conda的机制熟悉了再关掉自动激活也不迟。3. 环境变量配置与国内镜像源替换3.1 环境变量的两种配置方式对比关于环境变量网上的教程有的让改/etc/profile有的让改~/.bashrc还有的让改/etc/environment看起来特别乱。这里给你一个明确的、亲测可行的方案。安装过程中选yes执行conda init的话~/.bashrc的末尾会自动添加类似这样的内容# 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的shell hook功能如果失败就手动把anaconda3/bin目录加到PATH里。我的建议是不要手动去改这个block里的内容更不要自作聪明把export PATH...单独加到~/.bashrc别的位置。因为这段是conda自己管理的你手动改乱了反而会导致后续conda activate命令失效。如果安装时选了no那就用上面提到的conda init bash自动生成这段代码不要手动写。3.2 更换国内镜像源的具体操作Anaconda默认的下载源在国外在Ubuntu 18.04上如果不换源创建一个新环境要等好几分钟甚至更久而且经常出现下载到一半就断掉的情况。换源之后速度能提升几十倍这是必须要做的一步。我用的是清华的Anaconda镜像操作方式如下# 执行以下命令添加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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ # 设置安装包时显示源地址 conda config --set show_channel_urls yes执行完之后查看一下配置文件确认是否生效cat ~/.condarc应该能看到类似这样的内容channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - defaults show_channel_urls: true这里有个注意点defaults不用删掉它会被自动重定向到清华镜像不影响速度。另外如果你是用conda-forge的包比较多也可以把conda-forge的清华镜像加进去conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/3.3 pip源的替换容易被忽略的一步很多人换了conda源就以为万事大吉结果用pip install的时候又慢又容易断。别忘了conda和pip是两套独立的包管理工具pip的源需要单独设置。推荐用清华PyPI源或阿里云源# 清华PyPI源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 或者用阿里云源速度也很稳定 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/设置完之后可以验证一下pip config list个人测试下来的感受是清华PyPI源在Ubuntu 18.04上的连通性很好阿里云的CDN节点也很稳选哪个都行关键是别用默认的官方源。4. 创建与配置Python虚拟环境4.1 conda虚拟环境的核心理念为什么要用虚拟环境因为在实际开发中不同的项目可能依赖不同版本的Python和不同版本的库。比如你做深度学习要装PyTorch 2.0另一个项目要兼容旧代码只能用PyTorch 1.10两个版本如果装在同一个环境里分分钟打架。conda的虚拟环境就是给每个项目一个独立的“沙箱”环境之间完全隔离互不干扰。这相当于每个项目都有自己的一个干净房间里面的Python版本、库的版本都自己说了算不会影响别人。4.2 从创建到激活的完整流程创建虚拟环境的命令格式是conda create -n 环境名称 python版本号比如我要创建一个名为py38、Python版本为3.8的环境conda create -n py38 python3.8执行之后conda会分析依赖关系显示将要安装的包列表输入y确认即可。这里给几个实操中的建议第一环境名称尽量简短有意义比如py38、tf2、pt2不要用test123这种没意义的名字不然环境多了自己都分不清。 第二创建环境时顺手指定Python版本这是一个非常好的习惯。不要创建之后再换Python版本容易出问题。 第三如果你想创建的环境里预装一些常用包可以一次性写上去conda create -n py38 python3.8 numpy pandas matplotlib jupyter这样创建好之后numpy这些库就已经装好了省得再单独装。环境的常用管理命令这里一并列全# 激活/进入环境 conda activate py38 # 退出当前环境 conda deactivate # 查看所有环境 conda env list # 删除环境连同环境里所有包一起删除 conda env remove -n py38 # 查看当前环境下的包列表 conda list注意一个细节source activate py38和conda activate py38在旧教程里都能看到但现在推荐用conda activate因为source activate在新版本中会提示deprecated。4.3 安装PyTorch等深度学习框架的实操环境创建好了接下来就是往里面装各种包。以深度学习最常用的PyTorch为例很多人安装时会遇到一个问题直接执行官网给的命令下载速度极慢而且还容易装错版本。我的做法是先确认自己的CUDA版本nvidia-smi # 看右上角的CUDA Version然后根据CUDA版本选择合适的PyTorch版本。如果你的是CUDA 11.8可以这样安装conda activate py38 # 使用清华pytorch镜像安装 conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ -c nvidia这里有个坑用了清华源之后-c参数指定的频道会覆盖你之前配置的镜像源所以-c nvidia这个源也得能访问通才行。如果你网络不稳定可以改用pip安装pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118实测下来在Ubuntu 18.04 清华pip源的前提下pip方式安装PyTorch的成功率和速度都还不错。装完之后务必验证一下python -c import torch; print(torch.__version__); print(torch.cuda.is_available())如果输出True说明CUDA可用环境配置成功。如果输出False不要急着怀疑装错了先用python -c import torch; print(torch.version.cuda)看看PyTorch编译用的CUDA版本再对照驱动支持的CUDA版本排查。5. 与PyCharm的联动配置5.1 为什么要在PyCharm中配置conda环境命令行里能用conda只是第一步。真正开始写代码调试的时候绝大多数人还是会用IDE。PyCharm是我在Ubuntu 18.04上用得最多的Python IDE它的优势在于集成了调试器、代码补全、版本控制等一堆功能写代码效率比纯命令行高很多。但是如果不把PyCharm和conda环境关联起来PyCharm默认会使用系统自带的Python解释器你在PyCharm里运行代码时import不到你在conda环境里装的任何包非常容易让人怀疑人生。所以配置联动是必须的。5.2 PyCharm中配置conda环境的两种方式方式一创建新项目时配置新建项目时在Project Interpreter或Python Interpreter的设置界面里选择Previously configured interpreter点击Add Interpreter选择Add Local Interpreter在弹出窗口中选择Conda Environment选择Existing environment然后找到你的anaconda3目录下的envs/py38/bin/python点击确定即可方式二已有项目切换解释器如果你的项目已经创建好了想切换解释器打开PyCharm的File - Settings找到Project: 你的项目名 - Python Interpreter点击右侧的齿轮图标选择Add同样选择Conda Environment指定环境路径这里有个小技巧在PyCharm中选择解释器时如果下拉列表里直接能看到conda选项说明PyCharm自动发现了你的conda安装位置直接选那个会自动列出所有环境。如果看不到就手动指定/home/你的用户名/anaconda3/envs/py38/bin/python这个文件路径。配置好之后PyCharm的右下角会显示当前使用的解释器和环境名。这时候运行代码所有在conda环境里装的包就都能正常import了。5.3 新版PyCharm的界面变化与应对2023年之后的PyCharm版本包括2023.3、2024.1等界面做了比较大的调整很多老教程里的操作路径已经对不上了。新版PyCharm使用Settings - Project - Python Interpreter然后点击Add Interpreter - Add Local Interpreter依然可以找到Conda选项。如果你用的是社区版PyCharm免费版需要注意社区版对conda环境的支持在某些版本里有小bug表现为添加解释器后找不到已安装的包。遇到这种情况解决办法是手动刷新在解释器设置里先切到System Interpreter再切回Conda Environment多切换几次通常会触发缓存刷新。还有一个常见问题PyCharm里的终端不会自动激活conda环境。如果你在PyCharm底部的Terminal里敲conda activate py38提示命令找不到说明PyCharm终端没有继承你~/.bashrc的配置。解决办法是在PyCharm的Settings - Tools - Terminal里设置Shell path为/bin/bash并且在环境变量里加上PATH。这个坑很多人都会遇到配置好了之后PyCharm的终端就跟外面终端的表现一致了。6. 常见问题与排查技巧实录6.1 问题速查表问题现象可能原因解决方案conda: command not foundconda init未生效执行~/anaconda3/bin/conda init bash后source ~/.bashrc创建环境时下载速度极慢未换国内源执行conda config --add channels添加清华源运行python时找不到模块在错误的conda环境中执行conda activate 环境名后再运行PyCharm中import不了conda包IDE未关联conda解释器在设置中手动指定anaconda3/envs环境路径安装PyTorch后cuda不可用版本不匹配检查nvidia-smi的驱动版本和pytorch的cu版本终端提示(base)不见了自动激活被关闭执行conda config --set auto_activate_base true删除整个Anaconda不干净残留配置和环境变量按下面的完整卸载流程操作6.2 关于GLIBCXX错误的处理方案在Ubuntu 18.04上安装较新的Anaconda版本后有时候运行程序会报这样的错误ImportError: /usr/lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.29 not found这个问题的本质是Anaconda自带的动态库比系统自带的旧库新运行时加载了系统的旧libstdc导致找不到新版本符号。这是包管理时代很典型的“老系统 新软件”冲突。解决方案有几种我实测最有效的是强制conda环境使用自己的libstdc。在终端里执行conda install libstdcxx-ng -c conda-forge然后设置LD_LIBRARY_PATHexport LD_LIBRARY_PATH$HOME/anaconda3/lib:$LD_LIBRARY_PATH建议把上面这条export加到~/.bashrc里一劳永逸。如果不想设置全局环境变量还有一个变通方案在运行报错的代码之前先执行conda activate 你的环境名 conda install libstdcxx-ng这个方法在深度学习环境和ROS相关项目里特别管用因为在Ubuntu 18.04上做机器人开发的人很多都会同时用到ROS和Anaconda两者对C标准库的版本要求不同容易互相影响。6.3 Anaconda的彻底卸载与重装指南万一装坏了需要卸载并重装这里给出我的标准流程。网上搜索anaconda卸载很多教程让用anaconda-clean但实测下来这个工具只清理配置文件还可能出现交互式确认跟其他指南里的操作对不上。我建议手动卸载更彻底# 1. 退出所有conda环境 conda deactivate # 2. 删除整个anaconda3安装目录 rm -rf ~/anaconda3 # 3. 清理.bashrc中的conda初始化代码 # 用编辑器打开 ~/.bashrc删除conda initialize那一段 vim ~/.bashrc # 删除从 # conda initialize 到 # conda initialize 之间的所有内容 # 4. 清理其他可能存在的相关配置 rm -rf ~/.condarc rm -rf ~/.conda rm -rf ~/.continuum # 5. 清理环境变量如果你在~/.bashrc或~/.profile中手动添加过 # 删除你之前手动添加的 export PATH/home/你的用户名/anaconda3/bin:$PATH # 6. 重新加载配置 source ~/.bashrc卸载完成后如果你想重装按照前面第2节的步骤重新来一遍就好。顺便提一个很多教程都没提到的点~/.conda目录里存放的是conda的缓存和临时数据长期攒着会非常大有时候能占据好几个G的磁盘空间。如果磁盘紧张可以定期清理conda clean --all这条命令会清理所有缓存的安装包和临时文件。6.4 远程SSH环境下安装的特殊注意事项如果你是在远程服务器上安装通过SSH连接有两点需要特别注意第一不要用sudo安装。Anaconda默认会检测当前用户如果用了sudo安装目录的所有者会变成root后续普通用户使用conda会提示权限不够。保持普通用户身份安装就好。第二SSH断开可能导致安装中断。为了保险起见建议使用screen或tmux这类终端复用工具来跑安装# 先启动一个screen会话 screen -S anaconda_install # 在screen会话中执行安装命令如果SSH断开了重新连上后执行 screen -r anaconda_install # 会看到安装过程还在继续不会因为断连而失败这个技巧在实际工作中非常实用。我在给实验室的服务器装环境时经常遇到连SSH到一半断线的情况用screen之后就不会有这个问题了。7. 最后的几点实用经验写到这里核心流程都走了一遍。最后分享几个我在实际使用中总结的经验算不上什么大道理但确实能让后面的使用省心不少。第一关于环境的管理。刚开始用conda的时候我抱着“多建环境随便折腾”的心态结果三个项目建了八个环境互相交叉使用最后自己都分不清哪个环境装了什么包。现在我的习惯是一个项目一个环境项目结束后就把环境删掉绝不留着。这样每个环境都很干净磁盘占用也小。检查环境里装了什么包用conda list要导出一个环境的包清单用conda env export environment.yml换机器的时候直接用conda env create -f environment.yml一行命令重建非常方便。第二关于conda和pip混用的问题。一个常见的使用误区是在conda环境里用pip装包的时候不确认自己是否真的在该环境中。如果你执行pip install xxx的时候没有激活环境很可能装到了系统Python里造成包“消失了”的错觉。解决的办法是每次执行pip命令之前先看一下终端行首有没有(环境名)的标识或者执行which pip确认pip路径指向的是不是当前conda环境下的pip。第三关于清华源的一个小补充。我用的清华源偶尔会有同步延迟个别新发布的包可能暂时找不到。这时候不用慌避开高峰期重试一两次或者临时用一下conda-forge频道大多数情况下都能解决。如果遇到SSL证书报错之类的奇怪问题也可以试试中科大的镜像源两边的速度差距不大哪个能用用哪个。第四既然标题写了“最新最全”再多说一句版本选择。截至这篇文章更新的时间Anaconda官方最新版本已经内置Python 3.12了但我依然不太建议在Ubuntu 18.04上直接上最新版。原因很简单18.04的系统库比较老旧跟太新的软件容易有兼容性问题比如前面提到的GLIBCXX错误。选一个成熟稳定的版本比追求“最新”要靠谱得多。如果你不是必须用最新特性Anaconda3-2023.09或者Anaconda3-2022.05这两个版本在18.04上非常稳装完跑深度学习全家桶都没毛病。我的这套流程前前后后在十几台Ubuntu 18.04的机器上验证过有普通工作站有远程服务器也有GPU服务器。只要按步骤来不敢说100%一次通过但遇到问题基本都能在文中的排查表里找到答案。如果你在安装过程中遇到了我文中没提到的问题欢迎在评论区把报错信息贴出来我们一起研究解决。