在Linux上安装Anaconda:Python环境管理与虚拟环境实战指南
2026/9/19 21:04:59 网站建设 项目流程

我第一次在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 安装向导里的问题到底怎么选

执行安装脚本后,会进入交互界面,第一次装的人容易懵,我按顺序翻译一下:

  1. 显示许可协议,一堆英文,用回车键或空格键翻页,翻到底部后输入yes
  2. 提示“Do you accept the license terms?”,输入yes回车
  3. 提示安装路径,默认是/home/用户名/anaconda3,直接回车即可
  4. 提示是否初始化,内容类似“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命令、activatedeactivate这些命令在终端里生效。你不需要完整看懂这段代码,但要知道它存在。

如果安装时选了no,或者初始化配置出现问题,之后可以手动补齐:

~/anaconda3/bin/conda init bash

如果你用的是zsh,就执行:

~/anaconda3/bin/conda init zsh

conda init可以接受多个Shell参数,比如bashzshfish。装完以后,配置只对当前用户生效,不会影响系统其他用户,这也是我建议每个用户各自安装的原因。

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,所以安装完重开终端往往就能直接用。如果你是用tmuxscreen创建的窗口,它们在某些配置下不会读取最新的.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.py

conda 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参数指定编码。如果提示不支持,可以改用7zconvmv修复文件名的编码。实在没时间折腾,以后压缩文件时尽量使用英文文件名,能避开90%的乱码问题。

8. 卸载Anaconda与迁移环境:不留下历史包袱

8.1 干净卸载的标准流程

很多人以为卸载Anaconda就是执行rm -rf ~/anaconda3。这个操作并不完整,因为还有隐藏配置文件、环境备份目录残留在系统里。

比较稳妥的卸载流程是:

conda activate base conda install -n base -c conda-forge anaconda-clean -y anaconda-clean --yes

anaconda-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”的困惑。需要哪个环境,就主动激活哪个环境,整个过程清清楚楚,坑也少很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询