我第一次在Linux上安装Anaconda,是几年前接手一台实验室的服务器。当时系统自带的Python 3.6勉强能跑,但项目要求Python 3.8,我既不敢动系统环境,又不想手动编译,折腾了一下午差点把系统搞坏。后来老老实实装上Anaconda,才发现Linux上做Python环境管理,最舒服的方案其实就是它。这篇文章我会把整个流程拆开讲:从下载安装包、执行安装脚本、配置环境变量、换国内镜像源,到创建虚拟环境和卸载清理,每个环节都标注容易踩坑的点,新手按步骤照做就够,老手也能跳着看。
1. 为什么建议在Linux上用Anaconda:先理清需求和选择
1.1 Python环境管理到底难在哪
很多新手拿到Linux服务器,第一反应是用系统包管理器装Python,比如Ubuntu上的apt install python3,CentOS上的yum install python3。这样确实省事,但后面会遇到一个很现实的问题:系统里的Python往往被系统工具依赖,不能随便动。
我自己就吃过亏。Ubuntu桌面环境里,很多核心组件依赖/usr/bin/python3,如果你为了让某个库跑起来,用系统Python强行升级或安装了某个版本的依赖包,轻则包冲突,重则桌面环境出问题。近几年Ubuntu还加了PEP 668限制,直接pip install到系统环境中会提示“externally-managed-environment”,要求你使用虚拟环境或包管理器。这就是在告诉你:别把系统Python当自己的开发环境。
如果你只是写个一次性脚本,那无所谓;一旦需要同时维护多个项目,每个项目依赖不同的库版本和Python版本,没有隔离机制就会陷入无穷无尽的冲突。Anaconda出现正是为了解决这件事。
1.2 直接系统装Python和Anaconda的差距
我整理了一份对比,方便你判断自己的场景:
| 方案 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| 系统包管理器 | 下载快,随发行版更新 | 版本通常较旧;改动可能影响系统工具 | 临时脚本、系统工具依赖 |
| 源码编译 | 版本完全可控,可自定义优化选项 | 编译慢,依赖多,升级维护麻烦 | 特殊平台、需要定制化 |
| Anaconda | 自带大量科学计算包,虚拟环境隔离,conda能管非Python依赖 | 体积大,默认源慢,还有学习成本 | 数据分析、机器学习、多人共用服务器 |
| Miniconda | 体积小,只带conda和Python,按需装包 | 没有预置的包,需要自己安装 | 追求轻量、只想用虚拟环境的人 |
从实际使用体验来看,如果你平时玩数据科学、深度学习,Anaconda是最直接的选项,因为numpy、pandas、matplotlib这些常用包已经预装好。如果你空间紧张,Miniconda会更合适,安装方式和本文几乎一模一样,只是少了预装包。这篇文章以Anaconda为例子,但Miniconda完全可以照抄,只需把安装包后缀换成Miniconda的版本。
1.3 本文适用的Linux发行版和基础准备
Anaconda官方支持几乎所有主流Linux发行版,包括Ubuntu、Debian、CentOS、Rocky Linux、AlmaLinux、Kali Linux等。不管你是物理机、虚拟机还是云服务器,只要CPU架构是x86_64或者ARM64,都能安装。
动手之前,建议确认以下几点:
- 有一个普通用户账号,不推荐直接在root下安装。很多服务器默认用root,我理解有些场景图省事,但Anaconda装完以后创建的文件都归root,后面其他用户想用就很别扭。建议先新建普通用户,比如
useradd -m -s /bin/bash alice,再设置密码,切到alice再继续。 - 磁盘空间至少预留10GB。Anaconda本体不算大,但环境一旦建多了,每个环境都可能占几GB。
- 内存2GB以上,条件允许越大越好。创建环境时conda要解析依赖,配置太差会卡很久。
- 远程服务器最好能通过SSH连接,并建议使用tmux或screen来跑长时间下载任务,后面我会讲原因。
2. 下载Anaconda:官方渠道、国内镜像与安装包完整性校验
2.1 从官网找到Linux安装包
Anaconda官网的Download页面会根据你的系统自动推荐安装包,但很多人在服务器上无法直接打开图形页面,所以我习惯直接复制下载链接,然后在服务器上用wget下载。
命名规则很有规律,类似Anaconda3-2024.10-1-Linux-x86_64.sh。字段拆开看就是:软件名(Anaconda3)、版本号(2024.10)、构建版本号、平台(Linux)、架构(x86_64)。如果你的机器是ARM架构,文件名会显示aarch64。下载之前可以用uname -m确认一下架构,避免下错版本。
命令参考:
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh如果你是在自己电脑上下载好安装包,再传到服务器,可以用scp:
scp Anaconda3-2024.10-1-Linux-x86_64.sh username@服务器IP:/home/username/2.2 国内镜像源加速下载
这里必须说实话:Anaconda官方站点在国内的连通性不太稳定,下载速度经常让人崩溃。所以我更推荐用国内高校或云厂商提供的开源镜像站,正常公开访问,直接下载即可。
常用的两个:
- 清华TUNA镜像:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ - 阿里云镜像:
https://mirrors.aliyun.com/anaconda/archive/
打开对应目录后,能看到一串版本目录,选你想要的版本,找到Anaconda3-版本号-Linux-x86_64.sh文件,用wget下载。比如:
wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.10-1-Linux-x86_64.sh-c参数表示支持断点续传,下载中断了可以接着传。如果你的服务器在公司内网,一般会有内部软件源或者镜像加速地址,换成内网地址也是同样操作。注意一点:看到.sh后缀别顺手解压,它本身就是可执行的安装脚本,不需要解压。
2.3 SHA256校验:装之前花一分钟,省下后面大麻烦
很多人下载完安装包就直接装了,我见过不止一次因为文件下载不完整导致安装报各种奇怪错误。校验文件完整性最靠谱的方式是SHA256。
官网下载页和国内镜像目录里一般都有SHA256SUMS文件,里面记录了对应安装包的哈希值。在安装包所在目录执行:
sha256sum Anaconda3-2024.10-1-Linux-x86_64.sh会输出一串64位的十六进制字符。把这串字符和镜像站SHA256SUMS里的值对比,如果一致,说明文件完整;不一致,说明下载过程出了问题,建议重新下载。
也可以用一条命令自动校验:
echo "<官方给的哈希值> Anaconda3-2024.10-1-Linux-x86_64.sh" | sha256sum -c -如果输出OK,就没问题。这个操作很像收到快递时看外包装:包装完好不代表里面没碎,但包装破了你一定不敢签收。
2.4 远程服务器下载太慢时的操作建议
在公司或者实验室的服务器上,SSH连接一旦断开,前台运行的wget就会中断。为了避免反复重传,我习惯用tmux把下载任务挂在后台。
tmux new -s download wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.10-1-Linux-x86_64.sh按Ctrl+B,再按D,就可以分离会话。之后SSH断开也不影响下载。想回来看进度,执行tmux attach -t download即可。
顺带说一句,如果之后从Windows上传压缩包到Linux,中文文件名很可能乱码,这是编码问题,不是Anaconda特有的,别被吓到。安装包本身用英文字符命名,正常不会碰到这个问题。
3. 执行安装脚本的每一步:交互选项、安装目录和conda init
3.1 先确认拿到的是Shell脚本,并赋予执行权限
安装包下载完成后,常见的执行方式有两种:
chmod +x Anaconda3-2024.10-1-Linux-x86_64.sh ./Anaconda3-2024.10-1-Linux-x86_64.sh或者不赋予执行权限,直接用bash运行:
bash Anaconda3-2024.10-1-Linux-x86_64.sh两种都可以。新手经常遇到Permission denied错误,多半是忘了加chmod +x,这时改用bash方式执行最省事。
这里我特别建议:安装时不要加sudo,就用普通用户执行。原因很简单,默认安装路径是/home/用户名/anaconda3,完全在用户自己的目录下,不需要root权限。如果加了sudo,安装的文件会变成root所有,以后当前用户创建环境、装包会遇到权限麻烦。
3.2 安装向导里的问题到底怎么选
执行安装脚本后,会进入交互界面,第一次装的人容易懵,我按顺序翻译一下:
- 显示许可协议,一堆英文,用回车键或空格键翻页,翻到底部后输入
yes - 提示“Do you accept the license terms?”,输入
yes回车 - 提示安装路径,默认是
/home/用户名/anaconda3,直接回车即可 - 提示是否初始化,内容类似“Do you wish the installer to initialize Anaconda3 by running conda init?”,这里输入
yes
很多教程会说最后一步填no,理由是“不修改用户的.bashrc文件,保持系统干净”。我自己的经验是:如果你是新手,想少折腾,这一步就填yes。填yes会让conda自动把初始化配置写进当前用户Shell配置里,装完重开终端就能直接使用conda命令。
如果填了no,后续你需要手动执行conda init或者手动配环境变量,体验会差很多。
3.3 conda init 在配置文件里做了什么
选yes后,安装脚本会在~/.bashrc文件末尾写入一段配置,这段配置定义一个shell函数,让conda命令、activate、deactivate这些命令在终端里生效。你不需要完整看懂这段代码,但要知道它存在。
如果安装时选了no,或者初始化配置出现问题,之后可以手动补齐:
~/anaconda3/bin/conda init bash如果你用的是zsh,就执行:
~/anaconda3/bin/conda init zshconda init可以接受多个Shell参数,比如bash、zsh、fish。装完以后,配置只对当前用户生效,不会影响系统其他用户,这也是我建议每个用户各自安装的原因。
3.4 安装完成后的验证命令
安装结束后,重开一个终端,执行以下命令验证:
conda --version python --version which python conda env list如果一切正常,终端提示符前面可能多了一个(base),这说明已经自动激活了base环境。如果你不习惯每次都自动进入base环境,可以关掉:
conda config --set auto_activate_base false关掉之后,终端不会再显示(base),但你依然可以用conda activate 环境名手动进入指定环境。我个人推荐关掉,理由后面会讲。
4. 终端找不到conda命令:环境变量与Shell配置排查手册
4.1 “conda: command not found”背后的几种可能
这是安装Anaconda后最常见的问题,没有之一。归根结底,原因通常是下面几个:
- 安装时最后一步选了
no,没有执行conda init - 执行了conda init,但没有重开终端,直接在当前窗口敲
conda - 当前用户的Shell是zsh,但安装时只初始化了bash
- 当前用户和安装用户不是同一个,权限不足
- PATH变量被人为覆盖,导致Shell找不到conda位置
排查顺序我建议先看文件在不在:
ls -l /home/用户名/anaconda3/bin/conda文件存在,说明安装本身没问题。再看PATH:
echo $PATH如果在输出中没有找到/home/用户名/anaconda3/bin,说明Shell还没加载conda配置。
4.2 手动把Anaconda加进~/.bashrc的写法
最推荐的做法,是重新执行一次conda init,让它自己生成正确的配置:
~/anaconda3/bin/conda init bash执行完以后,编辑~/.bashrc,确认末尾出现了conda初始化块。如果你确实想手动写,最简单的是在~/.bashrc末尾添加一行:
export PATH="/home/用户名/anaconda3/bin:$PATH"然后执行:
source ~/.bashrc但需要注意,这种手动添加PATH的方式,只解决了“conda命令能不能找到”的问题,conda activate功能依赖的shell函数还得靠conda init生成的代码。所以很多时候,手动写PATH后conda activate仍然会报错。这也是为什么我反复强调:能用conda init就用conda init,不要自己手写。
把anaconda3/bin放在PATH前面还有一个作用:让python命令优先指向Anaconda的Python,而不是系统的/usr/bin/python3。这样在终端里执行python时,进入的就是你自己可控的环境。
4.3 source、新终端、非交互Shell三者的区别
这里有一个非常容易让新手产生误解的点。
执行source ~/.bashrc,只对当前终端会话生效。新开一个终端时会自动读取.bashrc,所以安装完重开终端往往就能直接用。如果你是用tmux或screen创建的窗口,它们在某些配置下不会读取最新的.bashrc,需要重开窗口。
更隐蔽的问题是:通过SSH执行一条远程命令、crontab定时任务、systemd服务,这些场景下Shell默认不加载.bashrc,或者只加载非交互模式下的那部分内容。所以你写在crontab里的conda activate xxx && python script.py,经常会遇到找不到conda命令。
解决办法很简单:在脚本或者定时任务里写绝对路径。
/home/用户名/anaconda3/envs/myenv/bin/python /home/用户名/script.py不要依赖conda activate,而是直接调用目标环境里的Python二进制文件。这个经验在写自动化脚本时能帮你省很多事。
5. 换国内镜像源:conda和pip都提速
5.1 为什么默认源这么慢
Anaconda安装好之后,conda默认从repo.anaconda.com下载包。这个源在国外,网络看起来是通的,但包一多、一大的时候,速度就不稳定,经常看到下载到一半卡住或者超时。对于国内用户,装完Anaconda后的第一件事,我建议就是换源。
这里要澄清一个概念:换源只是把conda的下载地址指向国内镜像,不改软件本身,不降低安全性。开源软件在镜像站上的文件和官方仓库理论上一致,且会做签名和哈希校验。
5.2 conda换源的完整命令与.condarc配置
最常用的是清华源,执行以下命令:
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执行完以后,查看当前配置:
conda config --show channels更完整的~/.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/free/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/ custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/ pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/不同版本的Anaconda和不同镜像站,目录结构可能略有差别。如果执行conda update或安装包时出现404或者CondaHTTPError,多半是路径写错了,可以打开镜像站目录确认实际文件名。
换了源以后,如果还是走老的缓存,容易出问题,建议清理索引缓存:
conda clean -i然后重新执行安装或更新命令。
5.3 pip加速与conda/pip混用注意事项
conda环境的底层也可以用pip安装包。很多人同时使用conda和pip,但没换pip源的话,照样会遇到速度问题。pip临时指定镜像源:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple想一劳永逸:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这样以后pip安装包默认走清华PyPI镜像。
这里提醒一句:同一个环境里,conda能装的包优先用conda装。什么时候用pip?比如某个包在conda仓库里没有,或者需要安装最新GitHub版本,这时才用pip。最怕的就是同一个库先conda装一遍,再pip装一遍,两边互相覆盖,最后环境状态变得极其混乱。我踩过坑,所以现在自己定了一条规矩:每个环境维护一份环境导出文件,里面记录哪些包是conda装的,哪些是pip装的。
6. 用Anaconda创建和管理虚拟环境:日常工作中的标准操作
6.1 为什么必须用虚拟环境
我举个真实场景。你有一个旧项目,用的是TensorFlow 1.x,只能在Python 3.7上跑;新项目要读一个新框架,官方要求Python 3.11。如果只有一个全局Python环境,你只能在每次切换项目时卸载重装Python和依赖包,费时费力还容易出错。
Anaconda的虚拟环境就是解决这个问题的。每个环境相当于一个独立的Python小世界,互不干扰。就算把一个环境搞坏了,直接删掉重建只需要几分钟,完全不影响其他环境。
6.2 创建环境时各参数的含义
创建一个名字叫ml_env、Python版本3.10的环境:
conda create -n ml_env python=3.10参数说明:
-n:环境的名称(name)python=3.10:在这个环境里安装Python 3.10- 可以追加
-y,表示确认创建,不用再手动输y
如果你想创建一个环境,并同时装几个常用包:
conda create -n web_env python=3.10 django flask -y还可以用环境配置文件夹恢复环境:
conda env create -f environment.yml我自己的习惯是,每个项目根目录放一个environment.yml文件,记录项目所需的环境信息。换电脑或者换服务器时,一条命令就能重建环境,不用手动装几十个包。
6.3 激活、退出、删除:每天都会用的命令
创建好环境后,激活它:
conda activate ml_env终端提示符会从(base)变成(ml_env),此时which python指向的就是这个环境里的Python。退出当前环境:
conda deactivate查看本机所有环境:
conda env list输出列表中,带*的就是当前环境。删除环境:
conda remove -n ml_env --all这里再强调一次脚本场景:如果你想在shell脚本中让某个环境运行Python脚本,最稳定的写法不是先激活环境再运行,而是直接用该环境下的Python绝对路径。路径规律是/home/用户名/anaconda3/envs/环境名/bin/python。
6.4 把conda环境接到PyCharm/VSCode里
命令行跑环境很顺手,但写代码时很多人还是在IDE里。以PyCharm为例,在设置里选择Project Interpreter,然后添加Existing Interpreter,路径指向/home/用户名/anaconda3/envs/ml_env/bin/python,这个环境即可使用。VSCode里按Ctrl+Shift+P,输入Python: Select Interpreter,选择对应路径。
这一步本质上是让IDE里跑代码时调用conda的环境,而不是系统Python。很多人装完Anaconda后启动PyCharm,发现还是用的默认解释器,就是没有手动指定环境。
7. 安装使用中的高频坑:权限、系统Python、警告信息与周边问题
7.1 磁盘空间不足与目录权限问题怎么破
Anaconda安装完成后,默认环境目录是~/anaconda3/envs。创建新环境时经常遇到磁盘空间不够的报错,比如:
CondaError: Not enough space on disk排查第一步是看磁盘空间:
df -h /home如果/home所在分区确实空间紧张,可以把环境创建到其他分区或者数据盘。方法是使用-p指定路径创建环境:
conda create -p /data/envs/proj_env python=3.11激活时也要写完整路径:
conda activate /data/envs/proj_env这里还有个权限问题:没有sudo权限的普通用户,不要尝试把环境装到/opt、/usr这类系统目录。conda本身不需要系统级安装,老老实实放在自己家目录或者自己有权限的数据盘即可。
7.2 系统内置Python真的会被Anaconda弄坏吗
很多第一次安Anaconda的人都会担心:会不会把系统原来的Python弄坏?
正常安装和使用情况下,Anaconda不会动/usr/bin/python3。它只是把Anaconda自己的目录加到了当前用户的PATH里,系统服务、桌面组件调用Python时,仍然直接指定/usr/bin/python3或/usr/bin/env python3,一般不受影响。
会让人产生误解的情况是:你在终端里已经激活了某个conda环境,然后执行sudo python,结果发现Python变成了Anaconda的。这是因为sudo在某些配置下会保留当前用户的一部分环境变量,导致它找到的是Anaconda的Python。这不是系统Python被破坏了,而是你“用错了”环境。想确认系统Python没问题,可以这样:
/usr/bin/python3 --version只要这个命令正常,系统本身没有被动过。
7.3 激活环境时遇到的warning提示怎么解
有人截图问我:明明环境里装了包,直接运行某个Python脚本时,出现了类似This Python interpreter is in a conda environment, but the environment has not been activated的警告。这个问题大多不是环境坏了,而是你用了环境里的Python二进制文件,却没有激活对应环境对应的环境变量。
解决办法有几种:
第一种,先激活环境再运行:
conda activate myenv python script.py第二种,不想交互式激活环境下运行,用conda run:
conda run -n myenv python script.pyconda run会自动给子进程设置好环境变量,适合脚本和定时任务。缺点是它有一定额外开销,而且不是特别适合需要交互输入的程序。日常开发中,直接在终端激活环境是最顺手的方式。
7.4 和新人有关的周边问题:Linux新建用户、解压乱码
安装Anaconda的过程中,很多新手会顺手碰到两个无关但又很像的Linux问题。
第一个是新建用户。前面提到不建议用root安装Anaconda。创建普通用户的操作很简单:
useradd -m -s /bin/bash alice passwd alice su - alice然后就在alice用户下执行Anaconda安装脚本。这样每个用户的配置和虚拟环境都是独立的,不会互相污染。
第二个是解压文件乱码。Windows下打的zip包,传到Linux后解压,文件名经常变成一堆乱码。这是压缩包内的文件名编码问题和系统默认编码不一致导致,跟Anaconda没有关系。如果遇到,可以试试:
unzip -O GBK 文件名.zip部分unzip版本支持-O参数指定编码。如果提示不支持,可以改用7z或convmv修复文件名的编码。实在没时间折腾,以后压缩文件时尽量使用英文文件名,能避开90%的乱码问题。
8. 卸载Anaconda与迁移环境:不留下历史包袱
8.1 干净卸载的标准流程
很多人以为卸载Anaconda就是执行rm -rf ~/anaconda3。这个操作并不完整,因为还有隐藏配置文件、环境备份目录残留在系统里。
比较稳妥的卸载流程是:
conda activate base conda install -n base -c conda-forge anaconda-clean -y anaconda-clean --yesanaconda-clean会自动备份相关配置到~/anaconda_backup目录。执行完以后,再删除主安装目录:
rm -rf ~/anaconda3如果以后确定不再需要这些配置,可以连备份目录一起删掉。注意别手滑:~/anaconda_backup里可能有你之前的配置和自定义环境信息,最好先看一眼里面的内容再决定。
8.2 手动清理残留:配置文件、rc文件和PYTHONPATH
如果你不想用anaconda-clean,或者它因为某些原因安装失败,也可以手动清理。需要检查的位置包括:
~/.condarc:conda配置文件~/.conda:conda缓存和状态目录~/.continuum:Anaconda的辅助目录~/.bashrc、~/.bash_profile、~/.profile:里面是否有conda init添加的代码块或手动设置的PATH~/.zshrc:如果用的是zsh
清理完这些后,重开终端,执行:
which conda如果没有任何输出,说明卸载已经干净了。
这里特别提一下PYTHONPATH。很多老手曾经为了让某些包全局可用,在~/.bashrc里设置了PYTHONPATH。Anaconda卸载后,如果这个环境变量还在,会干扰后续其他Python程序,导致“为什么我的包从这里导入”这种奇怪问题。建议在卸载Anaconda后,自己检查一下这个变量:
echo $PYTHONPATH如果有内容,就要考虑是否还要保留。我的习惯是尽量不设置全局PYTHONPATH,项目的依赖交给虚拟环境管理。
另外,如果你是想卸载旧版本Anaconda,然后换Miniconda或者新版本Anaconda,建议卸载前先导出所有环境:
conda env export > environment_backup.yml对于conda和pip混合安装的包,再补一个pip冻结清单:
pip freeze > requirements_backup.txt新机器上装好conda后,执行:
conda env create -f environment_backup.yml可以快速恢复环境。虽然不可能100%还原,但总比重装几十个包要强得多。
最后分享一个我用了很久的小技巧:装好Anaconda后,先把auto_activate_base关掉,也就是让Shell启动时不自动进入base环境,然后把自己常用的项目环境固定好。这样终端干净,也不会出现“明明没进环境,Python却指向Anaconda”的困惑。需要哪个环境,就主动激活哪个环境,整个过程清清楚楚,坑也少很多。