ARTICLE DETAIL

资讯详情

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

Linux下conda实战:Miniconda安装、换源与环境管理全攻略

Linux下conda实战:Miniconda安装、换源与环境管理全攻略 1. 为什么要用conda以及它到底解决了什么问题如果你是刚接触Linux的开发者或者已经在用Linux但还没试过conda那这篇文章值得你认真看完。conda全称是Anaconda Distribution里的核心包管理器但它也可以独立安装为Miniconda它的核心能力就两条管理Python软件包和管理独立环境。我最早在Linux下用conda是因为被Python版本和包依赖折磨得够呛。项目A需要Python 3.6 TensorFlow 1.x项目B需要Python 3.10 PyTorch 2.x如果用系统自带的Python要么天天改环境变量要么把所有依赖强行装在一起装到后期各种库之间互相打架编译报错能让你排查一下午。conda的出现相当于给每个项目单独开了个“沙盒”Python版本、库的版本都被隔离得干干净净想切换项目就切换环境不污染系统也不用担心删了某个包把别的项目搞崩。另外conda本身跨平台Linux、macOS、Windows都能用而且它在Linux下的表现最稳定。无论你用的是Ubuntu、CentOS还是Debian安装步骤基本一致。这篇文章是我在自己服务器和本地虚拟机上反复试过之后总结出的完整流程从零开始每一步都有命令、有解释、有坑点保证你照着操作能一次跑通。不管你是做数据分析、机器学习、后端开发还是就是想给服务器搭一个可复用的Python环境conda都是非常适合的方案。2. 安装前的准备工作和Miniconda安装全流程2.1 先想清楚装Anaconda还是Miniconda很多新手一上来就搜Anaconda因为名字好听、教程多。但我个人的建议是除非你真的需要Anaconda预装的那几百个数据科学包否则装Miniconda就够了。Anaconda体积巨大安装包将近1GB装完占好几个GB磁盘空间而且里面大部分包你根本用不到。Miniconda只有80MB左右只包含conda本身、Python和一个最小化的环境你需要啥就自己装啥干净、可控、不浪费资源。对于生产服务器来说Miniconda更是首选。如果后面发现自己确实需要完整的科学计算包也可以在Miniconda里通过创建环境时指定anaconda这个包集合来实现比如conda create -n datascience anaconda这条命令会装一个包含常用科学计算包的环境效果和Anaconda基本等同。2.2 下载Miniconda安装脚本在安装前先确认你的Linux是64位还是32位一般现在都是x86_64架构。用下面命令确认uname -m输出x86_64就选64位版本如果是aarch64就选ARM版本这在树莓派或某些ARM服务器上要注意。然后去Miniconda官网或者清华镜像站下载安装脚本。官网地址是https://repo.anaconda.com/miniconda/但国内服务器从官网下载速度可能很慢我一般用清华镜像站速度快很多wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh注意如果你在国内服务器上强烈建议走清华源后续还要配置conda的软件源一举两得。下载完可以看一下文件大小是否正常一般在80MB左右。2.3 执行安装脚本下载完成后先给脚本加执行权限然后运行chmod x Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh安装过程会有一个交互式向导注意看每一步的提示第一步会显示license协议连续按几次回车然后输入yes回车第二步会提示安装路径默认是/root/miniconda3如果是root用户或者/home/用户名/miniconda3直接回车使用默认路径即可。如果你想自定义路径在这个位置输入完整路径第三步会问是否要初始化conda在较新版本中会显示Do you wish to update your shell profile to automatically initialize conda?这里一定要输yes否则后续还得手动初始化这里有个容易踩的坑就是千万别用sudo去执行安装脚本。如果你当前用户就是普通用户而你又装了sudo前缀那conda会被装到root的目录下文件权限全部属于root你之后装包、建环境会遇到各种权限问题。2.4 验证安装是否成功安装完成后需要重新加载一下shell配置或者干脆退出终端重新登录让conda命令生效source ~/.bashrc然后运行conda --version如果能看到类似conda 24.x.x的输出就说明安装成功了。这时候命令行提示符前面可能会出现(base)字样说明conda的默认环境base已经自动激活了。如果你不想每次打开终端都自动激活base环境可以执行conda config --set auto_activate_base false这个看个人习惯我一般会关掉因为base环境我用的频率并不高每次进项目前手动激活对应环境更清晰也能避免在base里乱装东西。3. 初始化、换源与基础配置装完必须做的三件事3.1 处理solve environment慢和conda init报错问题这里我先讲讲一个热词里出现的高频报错CommandNotFoundError: Your shell has not been properly configured to use conda activate. To initialize your shell, run: $ conda init这个报错的意思是conda环境变量没有正确加载shell还不知道conda的存在。原因通常是安装的时候没有选择初始化或者你用的shell不是bash而是zsh、fish。解决办法很简单按提示执行conda init这条命令会自动检测你当前使用的shell并写入相应的配置文件比如~/.bashrc、~/.zshrc。执行完再source ~/.bashrc或者重开终端就行了。如果你用的是zsh建议在~/.zshrc里确认一下是否生成了conda初始化相关的代码块。稳妥的做法是执行conda init zsh。3.2 配置清华源让conda下载包的速度起飞国内服务器用conda装包最大的痛点就是默认官方源不稳定速度时快时慢运气不好还直接断连。解决方案就是换成清华镜像源。利用conda config命令添加源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的main、free以及conda-forge频道。conda-forge是社区维护的最大软件源很多包官方源里没有或者版本旧这里都能找到所以建议加上。添加完之后可以查看一下配置conda config --show channels能看到三个源并且顺序是刚加的那些就说明配置生效了。conda优先从排在最上面的源下载。这里我要特别强调一下conda换源后首次执行下载可能会出现缓存索引的告警提示这是正常的不用管。如果出现某个源访问报错如404或连接超时可以换个镜像站比如上海交大源、阿里源。但就我实测来看清华源是综合速度和稳定性的首选。再补充一个pip的换源因为用conda装不了的少数包还是要靠pip而pip默认的PyPI源在国内也很慢。执行pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这样后续用pip装包也能享受加速实测下载速度能提升多倍。3.3 给conda配置包含Python版本的环境参数配置完成后先验证一下conda的完整状态conda info这条命令会显示conda版本、Python版本、环境路径、源地址等详细信息。重点看channel URLs那几行确认是不是已经变成了清华镜像地址。如果一切正常建议先升级一下conda本身到最新版conda update -n base conda注意这里要指定-n base因为base环境是conda的自留地。升级完成后会提示是否继续输入y即可。升级的原因是旧版本conda在解析依赖时算法较慢新版本4.10以上尤其是23.x之后解决依赖的速度明显提升。4. conda核心操作实战创建环境、激活环境、安装包、删除环境4.1 创建新环境这一点是整个conda的核心用法conda最强大的功能就是环境隔离。创建一个新环境的命令格式是conda create -n 环境名称 python版本号 [其他包名]比如我们要创建一个名为labels的Python 3.9环境这个规格在目标检测项目中很常用因为很多老模型依赖3.9conda create -n labels python3.9执行后conda会进行依赖解析显示要安装的包列表输入y确认。下载和安装过程会用到刚配置好的清华源正常情况下几分钟就能完成。如果要创建环境的同时安装常用包可以这样conda create -n ml python3.10 numpy pandas matplotlib这条命令会创建ml环境并同时装好numpy、pandas、matplotlib省得后面对着一堆包名逐个装。4.2 激活和退出环境切换环境的核心操作创建好环境后必须激活才能使用这就是很多新手容易栽到那里的地方记着conda activate labels激活成功后命令行的提示符前面会出现(labels)字样表示当前处于labels环境中。这时候你执行python -V看到的就是这个环境里的Python版本而不是系统的。退出环境用conda deactivate这个命令会回到base环境如果在base里直接执行则返回到系统Python。注意如果你在安装时选了初始化但conda activate仍然报错十有八九是shell配置文件里conda初始化代码被覆盖或删除了回到3.1节重新conda init一下即可。4.3 安装包、卸载包、查看包列表在已经激活的环境中用conda install来装包conda install numpy也可以不激活环境直接指定环境名安装conda install -n labels numpy安装指定版本的包conda install numpy1.24.3这种包名版本号的写法是标准格式注意别写成Python语法里的双等号。卸载包conda remove numpy查看当前环境已有的包列表conda list如果要查看特定环境下的包conda list -n labels4.4 删除环境和克隆环境删除一个环境时要小心这个操作不可逆会把整个环境目录连同里面所有包都删除conda remove -n labels --all删除前建议先确认一下环境名千万别把base环境删了。如果误删了其他环境没有后悔药。克隆环境的场景是我平时经常用到的比如我在base里调好了所有常用工具包给新项目时不想重新一个个装就可以conda create -n newproject --clone labels这个命令会完整复制一份labels环境包括里面所有的包和配置。克隆后两个环境互不影响新建的环境改动不会影响原环境。这个功能在快速搭建多个项目环境时非常好用。4.5 导出和导入环境配置实现环境迁移把当前环境的包列表导出成文件conda env export environment.yml这个environment.yml文件记录了当前环境的所有包名和版本号可以提交到Git仓库别人拿到后可以快速复现同样的环境conda env create -f environment.yml这里有个小技巧如果只是想在别的机器上装相同名字的包不要求完全一致的版本可以用更轻量的方式conda list --explicit spec-list.txt conda create -n myenv --file spec-list.txt两种方式各有适用场景团队协作复现环境时我一般用第一种因为可读性强、依赖更精确。5. 实战场景用conda快速搭建Python 3.11和PyTorch环境5.1 通过清华源安装Python 3.11前面热词里提到了“使用清华源conda install python3.11”这块很多人搞不清楚怎么配合使用。其实过程很简单关键在于创建环境时用你配置好的清华源就行并不需要额外加什么参数因为conda会默认使用你已经配好的source。先创建环境并指定Python版本conda create -n py311 python3.11这里python3.11这个参数会让conda去所有配置的频道中查找Python 3.11的最新版本。由于我们已经配置了清华镜像源下载过程会很顺利。安装完成后激活环境验证一下conda activate py311 python -V看到Python 3.11.x就成功了。值得注意的是有些旧版本的conda对Python 3.11的支持不完整可能出现找不到包的情况。所以安装前先确认conda版本不要太旧我用的是conda 23.10.0随Miniconda最新版安装一切正常。5.2 安装PyTorch用镜像源解决下载慢的问题安装深度学习框架PyTorch时最常见的痛点就是模型库和CUDA依赖包太大官方源下载慢。如果走conda官方源几个GB的文件可能要下半小时甚至超时。用清华源之后整个过程会大幅提速。以安装CPU版本PyTorch为例conda install pytorch torchvision torchaudio cpuonly -c pytorch这里的-c pytorch指定了从PyTorch官方频道下载。但有个问题这个命令会默认先查官方源速度可能很慢。我们之前已经配置了清华的conda-forge源但PyTorch的官方频道还没加。加一下conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/配置好后再执行安装命令这样PyTorch相关包会优先从清华镜像下载。如果你用GPU版本的PyTorch建议去PyTorch官网用它的配置工具生成命令官网上会根据操作系统和CUDA版本生成对应的安装命令选好Linux conda形式即可。5.3 在PyCharm中配置conda环境装了conda以后Windows用户或者图形界面用户经常会遇到PyCharm不认识conda环境的问题。这里我说一下正确配置方式。打开PyCharm进入File - Settings - Project - Python Interpreter点击Add Interpreter添加解释器选择Conda Environment。此时PyCharm会要求你填一个路径关键点来了不需要填到具体的python执行文件而是直接填到conda安装目录。如果PyCharm自动检测不到手动选择路径。用命令行启动PyCharm时要特别注意环境变量因为此时PyCharm继承你终端的PATH所以建议在终端里先conda activate py311再打开PyCharm这样PyCharm能识别对应的conda环境。6. 常见问题排查与避坑指南6.1conda不是内部或外部命令的解决办法这个提示说明conda没有添加到环境变量里也就是PATH没有配置。检查一下~/.bashrc文件看末尾有没有类似export PATH/root/miniconda3/bin:$PATH如果没有手动加进去保存后执行source ~/.bashrc。在非交互式shell里比如cron定时任务也要确保加载了conda路径否则同样会报这个错。6.2 无法安装某些包或者下载速度很慢先确认源是否配置成功conda config --show channels如果只有defaults说明没生效。重新执行3.2节的命令添加源。如果下载时卡在Solving environment很久几十秒甚至几分钟都没反应这多半是conda依赖解析慢解决方法是升级conda版本conda update -n base conda新版本conda使用了更高效的求解器速度提升明显。6.3 安装某个包提示版本冲突怎么破版本冲突是conda使用中非常常见的问题比如A包要求numpy小于2.0B包要求numpy大于1.24conda找不到一个同时满足两个条件的版本就会报UnsatisfiableError。解决办法优先尝试conda install 包名版本号明确指定版本缩小搜索空间使用conda search 包名查看可用的版本列表如果确实需要两个有冲突的包可以考虑用两个环境分别装然后通过本地文件传递数据很多时候没必要强行共存换用conda-forge频道往往有惊喜这个频道的包维护更活跃我最近一次装深度学习相关的包组合时就是靠conda install -c conda-forge解决了一个官方源没法解决的依赖冲突这个通道的兼容性在此类场景中很管用。6.4 conda环境太多导致磁盘空间不足每个conda环境都是独立的一份Python解释器和包所以占用空间不小。装多了之后磁盘会越来越紧张。查看所有环境及其路径conda env list找到不需要的环境果断删除conda remove -n oldenv --all另外conda会缓存所有下载过的安装包清一下conda clean --all这条命令会清理索引缓存和下载缓存释放几百MB空间是常有的事。6.5conda activate无效或者提示初始化错误这个之前说过就是conda和shell的联动没做好。执行conda init解决。如果已经执行过conda init还是有问题检查一下当前shell是不是bashecho $SHELL看一下输出。如果是zsh但之前初始化写的是bash就会错位。重新执行conda init zsh source ~/.zshrc6.6bad interpreter或权限不足问题如果你在安装过程中使用了sudo或者后来不小心用root对该目录进行了操作可能会出现Permission denied错误。这是因为普通用户没有权限读写miniconda目录。解决办法给你的账号赋权sudo chown -R 用户名:用户名 /home/用户名/miniconda3把用户名替换成你自己的登录用户名注意路径要和实际一致。改完权限后再执行conda命令就正常了。6.7 conda和pip都需要装包怎么避免混乱混合使用conda和pip装包会导致一个环境内有两套包管理记录偶尔会出现同一模块两边都装了但版本不一致的情况。我的经验是约定一个优先级规则。核心科学计算包、深度学习框架首选conda安装因为conda会处理好依赖和二进制包的兼容性。conda里找不到的或者最新版只能通过pip装的才用pip。需要特别注意的是尽量不要在同一环境里反复交替使用conda和pip装同一个包这会覆盖之前的安装记录可能导致环境状态不一致甚至损坏。7. 使用conda真正常用的一组命令速查表我平时用得最多的命令其实就那些整理成表格方便大家查阅操作命令创建环境conda create -n 名字 python版本号克隆环境conda create -n 新名字 --clone 旧名字激活环境conda activate 名字退出环境conda deactivate删除环境conda remove -n 名字 --all查看环境列表conda env list查看环境中已装包conda list安装包conda install 包名安装指定版本包conda install 包名版本号卸载包conda remove 包名搜索包conda search 包名导出环境配置conda env export environment.yml导入环境配置conda env create -f environment.yml更新condaconda update -n base conda清理缓存conda clean --all查看配置conda config --show这些命令覆盖了日常使用中90%以上的需求没必要把所有命令都背下来用的时候回来查表就行。8. 经验总结我的一套conda最佳实践文章写到这里基础的流程基本讲完了。最后再简单分享一下我个人在长期使用中沉淀下来的一套工作方式不一定适合所有人但值得参考。第一点为每个项目单独建环境不要共用环境。哪怕是两个机器学习项目都用到PyTorch如果依赖版本有差异还是分别建环境更省心。建环境成本很低时间也就几分钟但解决冲突的时间往往更多。第二点环境名要起得有规律。比如我会用项目名_py版本这样的格式label_detection_py39、web_backend_py311一眼就知道这个环境是什么项目用的、什么Python版本。如果只用myenv、test这种名字过一两个星期你就不记得它是干嘛的了。第三点配置好源之后少折腾。清华源配好之后基本不用动不要频繁切换各种源。我见过有些人为了某个包反复换源最后把自己环境搞乱了。遇到特定包下载慢优先考虑换conda-forge这样的频道而不是整体把源改掉。第四点先把conda版本升级到最新的再装大型框架。每次装PyTorch或TensorFlow这种大型框架包之前我一般会先conda update -n base conda一下确保解析依赖的算法是最新版本这样那些动辄需要解析几百个依赖的安装流程能快很多。第五点用conda管理环境、用requirements.txt管理Python层面的依赖版本两者配合。conda负责二进制层面的兼容性requirements.txt记录项目的Python包依赖这样不管是conda还是pip的用户都能方便地复现你的环境。这个习惯在做开源项目协作时尤其重要。最后再回答一个经常被问的问题conda和virtualenv到底怎么选如果只用Pythonvirtualenv完全够用但一旦涉及到非Python的依赖、CUDA环境、C库conda的表现就远超virtualenv了。所以我长期使用的原则是纯Python项目随意涉及原生库和深度学习框架统一用conda——这是经过一次次踩坑验证出来的结论。
返回列表