☰
离网服务器离线安装Anaconda全流程:从下载到conda环境管理
2026/9/30 16:23:32 网站建设 项目流程

有些服务器,从开机那天起就摸不到外网。过去几年我维护过一批生产用的Linux机器,安全策略极其严格,整个网段被隔离开,想装任何软件都得先把安装包“搬”进去,纯靠人工传递。这种环境里要做Python开发和环境管理,最稳妥的方案就是离线安装Anaconda。这篇文章我就把整个流程完整梳理一遍,从下载安装包、传到内网、执行安装,到离线环境里怎么继续用conda装包、怎么避免装完变成“孤岛”,全部讲清楚。

不管你是要给内网服务器搭一套Python环境,还是帮实验室、机房的离网机器做数据科学基础环境,这篇内容都适合。我会把每个步骤后面“为什么要这么做”也一起说明白,而不是只丢一串命令让你照抄。

1. 离网服务器装Anaconda,先想清楚场景和方案

1.1 哪些机器会用离网环境

很多人第一次接触“离线安装”会觉得很奇怪:Anaconda 官网下载不就行了吗,为什么还要专门写一篇教程?但等你真正管过几台离网机器就知道,这几乎是生产环境和保密环境里的常规操作。

常见离网场景主要有这么几类:

  • 生产内网:服务器部署在机房,网络策略只开放业务端口,外网访问完全禁止。这类机器要跑数据任务、模型服务,必须先装好Python环境才能上线。
  • 研发隔离区:研发团队和外部网络隔离,代码、依赖包全部走内部制品库,不允许随意连外网下载。
  • 实验室和分支机构:很多高校实验室、分支机构机房的机器物理隔离,或者只有内网出口,无法访问公网源。
  • 运维灾备环境:平时不联网的备用节点,一旦主节点故障要立刻顶上,这时候如果系统环境不完整会非常被动。

在这些场景里,Anaconda 几乎是第一选择。因为它不仅仅是个Python解释器,还自带conda包管理器、几百个常用科学计算包,以及虚拟环境能力。装一套Anaconda,等于同时把Python运行时、依赖管理、多环境隔离都解决了,对离网机器来说性价比极高。

1.2 离线安装的整体思路

离线安装的核心逻辑其实非常朴素:既然机器无法从外部拉取软件,那就把需要的文件提前准备好,一次性拷贝进去。

具体来说,可以拆成两条路线:

  • 路线A:安装Anaconda本体 + 复制包缓存。先在联网机器上下载Anaconda安装脚本,传到内网安装。同时把联网机器上已经下载好的conda包缓存目录(pkgs目录)整个复制到内网机器对应位置。这样在内网里创建新环境时,conda能用本地缓存里的包,不需要联网。
  • 路线B:直接打包一个现成的conda环境。在联网机器上先把环境建好、依赖装齐,用conda-pack把整个环境打包成tar.gz,传到内网机器解压就能用。升级Anaconda本体不划算,但环境依赖已经全部固化,可移植性非常强。

两条路线各有适用场景。如果内网机器还没安装基础Python,走路线A;如果已经有Anaconda或者只想跑一个特定项目,走路线B更轻量。我这里会把A作为主线讲,B在后面专门开一节说明。

2. 准备工作:安装包、校验、传输一个都不能少

2.1 在联网机器上选版本、下安装包

离线安装最怕的一步就是下载阶段出问题。因为机器一旦进了内网,再想补文件就只能跑一趟现场或者走审批流程,效率极低。所以下载时务必要仔细确认版本和架构。

先说版本选择。Anaconda官方更新比较频繁,常见的有 2023.09、2024.02、2024.10 等版本。选择版本时注意两点:

  • 新版本内置的Python默认版本更高,比如2024系列默认Python 3.11甚至3.12,某些老系统、老内核的glibc版本可能不兼容。内网机器如果操作系统比较老(比如CentOS 7、Ubuntu 16.04),建议选老一些的Anaconda版本,比如2020.11(默认Python 3.8)。这一点我踩过坑,后面问题排查里会细说。
  • 确定内网机器的CPU架构。绝大多数x86服务器用Linux-x86_64这个安装包,arm64架构则要用Linux-aarch64。如果搞错了架构,运行时会直接报“Exec format error”。

下载位置,推荐优先用国内镜像站,比如清华的Anaconda镜像,速度稳定很多,尤其是几十人同时抢带宽的时代。下载命令大致如下:

# 确认目标机器架构 uname -m # 下载安装包(x86_64环境示例) wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.10-1-Linux-x86_64.sh # 也可以直接到官网获取安装脚本 # wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh

安装包一般有1GB左右,比较大。下载过程中如果网速不稳定,建议先下载到一个单独的目录,不要边下边用,免得文件损坏。

2.2 SHA256校验和文件传输的坑

下载完成后,很多人直接就把安装脚本拷到U盘里带走,这样最稳妥,但也有一个隐患:文件可能不完整。尤其是通过网盘、FTP、微信传文件等渠道传输超过1GB的文件时,中途断一下、通道压缩一下,安装包就可能损坏。

所以无论走什么传输方式,都要先在联网机器上算好校验值,传到内网后再校验一次。

# 在联网机器上计算SHA256 sha256sum Anaconda3-2024.10-1-Linux-x86_64.sh

拿到一串hash值后,把安装包和hash值一起拷贝到目标机,然后在目标机上再执行:

sha256sum Anaconda3-2024.10-1-Linux-x86_64.sh

两条hash必须完全一致。不一致就说明文件损坏,不要碰运气继续安装,否则装到一半报一堆莫名其妙的解压错误。

传输文件本身也有讲究。内网如果和内网之间允许SSH访问,推荐用scp或者rsync,而rsync支持断点续传,大文件传一半断了可以接着传:

# scp 一次性上传 scp Anaconda3-2024.10-1-Linux-x86_64.sh user@内网IP:/tmp/ # rsync 支持断点续传,断了不会全部重来 rsync -avP Anaconda3-2024.10-1-Linux-x86_64.sh user@内网IP:/tmp/

如果完全物理隔离,那就把安装包和hash值一起拷到U盘、移动硬盘里带进去,进去之后同样先校验再安装。

2.3 确认目标机的运行环境

安装之前,花两分钟检查目标机的基本情况,能避免后面很多翻车。需要确认的主要有三样:磁盘空间、系统依赖、是否已有旧版Python或Anaconda。

磁盘空间方面,Anaconda装完之后整体占用大概在3~6GB之间(取决于版本和包数量)。如果你打算把它默认装在/root/anaconda3或/home/xxx/anaconda3,注意看一下home分区剩余空间。如果机器是系统盘比较小的云主机,建议装到空间充足的目录,比如/data/anaconda3。

系统依赖方面,Anaconda 安装脚本本身依赖bzip2、tar等基础工具,一般系统都自带。但有一种情况比较麻烦:目标机的glibc太老。用一句命令即可检测:

ldd --version

CentOS 6、7这类老系统上,如果装新版Anaconda,安装后运行Python很可能报GLIBC_2.28 not found之类的错误。遇到这种情况无非两个方向:换旧版Anaconda,或者用Miniconda代替(Miniconda更小,只有几十MB,且对老系统更友好)。

最后,检查是否已存在旧版Anaconda或Python。如果之前用系统包管理装过Python,或者以前装过一个废弃的Anaconda目录,建议先清理干净再装新的,避免PATH里新旧环境打架,导致which python出来的路径不稳定。

3. 正式安装:交互模式和静默模式

3.1 交互式安装步骤

准备工作做完,接下来就是正式安装了。先讲交互式安装,这是大部分人第一次安装时会遇到的方式,也最容易看懂每一步在干什么。

进入目标机,切到合适的用户(要装到哪个用户目录下,就切到哪个用户),然后执行:

bash Anaconda3-2024.10-1-Linux-x86_64.sh

安装脚本启动后,会显示Anaconda的许可证说明,一路按Enter直到出现提示,输入yes表示同意。接下来它会询问安装路径,默认是/root/anaconda3(如果你当前是root用户)或者/home/username/anaconda3。直接回车接受默认就行,也可以手动改成别的路径。

再往下,脚本会问你:

Do you wish the installer to initialize Anaconda3 by running conda init?

这里输入yes,脚本会自动往当前用户的~/.bashrc里写入初始化配置,以后打开终端就能直接用conda命令。如果输no,就要手动配置环境变量,对新手不太友好。

安装完成后,执行一下让配置生效:

source ~/.bashrc

然后运行conda --version验证是否成功。正常情况下会打印出类似conda 24.9.2的版本信息。

交互式安装的优点是一步一步有提示,适合第一次操作。缺点是不好反复重复执行,尤其是要批量装几百台机器时,手动点几十次回车纯粹浪费时间。

3.2 静默参数化安装:-b -p

批量部署、自动化脚本场景下,Anaconda安装脚本其实早就留好了静默安装的参数。用-b(batch模式)和-p(指定安装路径),可以直接一步装完,全程无需人工交互:

# -b 表示静默模式,-p 指定安装目录 bash Anaconda3-2024.10-1-Linux-x86_64.sh -b -p /opt/anaconda3

静默模式会默认同意协议、直接安装到指定目录,装完不会自动改~/.bashrc。这意味着你需要手动配好环境变量。

配合-p指定路径,可以把Anaconda装到系统级目录。例如装到/opt/anaconda3后,写一个环境变量配置文件,让所有用户都能使用:

echo 'export PATH="/opt/anaconda3/bin:$PATH"' > /etc/profile.d/anaconda.sh source /etc/profile.d/anaconda.sh

静默安装最大的价值在于可重复。同一个安装包、同一套参数,不管执行10次还是100次,结果都完全一致,非常适合写进自动化脚本或运维手册。

3.3 环境变量与路径配置

不管是交互式安装还是静默安装,最终目标是让conda和python命令在终端里直接可用。如果命令行提示conda: command not found,问题多半出在环境变量配置上。

最常见的配置方式是编辑~/.bashrc,在末尾追加:

export PATH="/opt/anaconda3/bin:$PATH"

然后执行:

source ~/.bashrc

如果你希望系统里所有用户都能用Anaconda,则把上面那行写到/etc/profile.d/anaconda.sh,这样每个用户登录时都会自动加载。也可以用/etc/environment,但改完后需要重新登录才能生效。

配置完环境变量后,建议做一次完整的验证:

which conda which python conda --version python --version

如果which python路径指向/opt/anaconda3/bin/python,说明配置成功。如果指向的仍然是系统自带的/usr/bin/python,大概率是环境变量没配上,或者source之后当前终端仍未重新加载配置。

这里要特别注意:如果你安装时选择了交互式里的conda init,脚本往~/.bashrc里写的内容会比单纯加PATH复杂得多,它还会定义一堆conda shell函数,方便后续conda activate、conda deactivate时自动切换提示符。所以不要手动把那一整段删掉,除非你很清楚自己在做什么。

4. 离线环境下conda怎么用:把包“搬”到内网

4.1 为什么离线后conda install会卡在Solving environment

Anaconda本体装完了,这只是第一步。真正的挑战出现在你想创建虚拟环境或安装新包的时候。

如果内网机器没有网络,直接执行:

conda create -n myenv python=3.10

conda会试图连接默认的包源repo.anaconda.com,但内网无法访问外网,于是它一直重试网络请求,表面上看起来就是“卡在Solving environment”很久不动。有些人不知道原因,等半天等到超时,或者干脆把conda搞崩了。

这背后的逻辑其实不难理解:conda在解析环境依赖时,需要从源服务器拉取包元数据和安装包文件。没有网络,它就拿不到这些数据,自然无法完成解析。

所以离线环境里用conda,必须提前把包准备好,让conda“感知”到本地有现成的物料,并且告诉它不要试图访问网络。具体做法有两种主流方案:复制pkgs缓存,或者用conda-pack打包整个环境。

4.2 方案一:直接搬pkgs缓存,设offline

每台安装了Anaconda的机器上,都有一个本地包缓存目录,默认是~/anaconda3/pkgs/,里面存放着conda下载过的所有压缩包和解压后的目录。在联网机器上,你安装过的包都会沉淀在这里;把这些缓存整体复制到内网机器对应的pkgs目录,内网机器再创建环境时,conda就可以直接从缓存读取,不再走网络。

具体操作分三步。

第一步,在联网机器上,将pkgs目录打包:

tar -czf conda_pkgs.tar.gz -C /home/user/anaconda3 pkgs

如果你只想打包特定环境的依赖,也可以用conda list -n myenv --export导出包名,再手动下载对应的.conda或.tar.bz2包,但最省事的还是整目录打包,反正硬盘空间大。

第二步,把打包文件传到内网机器,解压到目标机Anaconda安装目录的pkgs里:

tar -xzf conda_pkgs.tar.gz -C /opt/anaconda3

注意解压后的路径必须是/opt/anaconda3/pkgs,这样conda才能找到。

第三步,设置conda离线模式:

conda config --set offline true

这个配置很关键,它告诉conda不要主动去访问网络。之后再执行:

conda create -n myenv python=3.10 --offline

conda会优先在当前机器的pkgs缓存里查找依赖包。只要缓存里有的,装起来非常快,瞬间完成。如果缓存里缺包,就会报“PackagesNotFoundError”,这时就只能回到联网机器上下载对应包再搬一次了。

4.3 方案二:conda-pack把环境打包带走

pkgs缓存方案适合“你还在不断开发、环境还没定型”的阶段。但如果环境已经稳定了、代码要部署到一批离网机器上,更推荐用conda-pack直接把整个虚拟环境打包成tar.gz,拷到目标机上解压即用。

在联网机器上安装conda-pack:

conda install -c conda-forge conda-pack

然后打包指定环境(比如myenv):

conda pack -n myenv -o myenv.tar.gz

打包出来的文件可能有三四百MB甚至更大,这很正常,因为里面包括了Python解释器和所有已安装的依赖库。把它传到内网机器后,放到Anaconda的envs目录下:

mkdir -p /opt/anaconda3/envs/myenv tar -xzf myenv.tar.gz -C /opt/anaconda3/envs/myenv

接下来激活环境:

conda activate myenv python --version

如果提示找不到conda activate,先确认当前shell已经初始化了conda(执行过source ~/.bashrc)。另外,用conda-pack打包时,原环境必须处于deactivate状态,不能在激活环境里打包,否则会失败。

这个方案最大的好处是彻底绕开了“解析依赖”的环节。环境里包含什么就是什么,目标机上不需要重新做依赖解析,解压即用,部署速度快得多。缺点也明显:环境被固定住了,后续想加包还得回到联网机器重新打包再来一遍。

4.4 方案三:pip download离线装Python包

很多情况下,你的Python项目依赖是写在requirements.txt里的,而这些包大多从PyPI安装,和conda的源不是一个体系。这时候可以用pip download先在有网机器上拉取所有依赖包,再拿到内网pip离线安装。

在有网机器上:

# 将项目所有依赖下载到指定目录 pip download -r requirements.txt -d ./offline_pkgs/

-d指定下载目录,pip会把requirements.txt里所有包以及它们的依赖都下载下来,保存为whl或tar.gz文件。

然后传到内网机器,执行离线安装:

pip install --no-index --find-links=./offline_pkgs/ -r requirements.txt

--no-index告诉pip不要访问PyPI,--find-links则指定本地目录作为包查找来源。只要之前下载完整,安装速度也非常快。

有一次我在离网机器上装一个机器学习项目,requirements里有十几个包,pip download一次性全拉回来了,结果target机器上有个包需要编译,缺gcc。后来我学乖了,下载的时候直接在last版本基础上顺便下载对应的wheel包,wheel包是预编译的,内网装起来根本不需要编译器。这个经验大家可以参考。

5. 装完之后的验证和问题排查

5.1 装完怎么确认能用

离线环境下装Anaconda,装完并不代表万事大吉。如果不对整体环境做一次完整验证,很容易在上线时才发现问题,而那时再排查就非常被动。

我做完安装和源配置后,通常会按顺序跑一遍以下命令,当作“体检”:

# 验证conda版本 conda --version # 验证默认Python版本 python --version # 确认当前Python路径是Anaconda的 which python # 确认conda环境列表 conda env list # 测试创建虚拟环境(用离线缓存) conda create -n test_env python=3.10 --offline -y # 激活虚拟环境 conda activate test_env # 确认虚拟环境中的Python路径正确 which python

如果每一步都没有报错,说明Anaconda本体、环境变量、离线源三方面都正常。测试完再顺手把test_env删掉:

conda deactivate conda env remove -n test_env

这样不会给后续使用留垃圾。

有一点值得单独强调:虚拟环境创建后默认Python版本一定要确认一下。有时候因为缓存里有多个Python版本,conda未必会按你指定的版本创建,导致后面项目运行行为不一致。最好的做法是创建后用python --version再验证一次,不要依赖创建时的提示信息。

5.2 常见报错和修复方法

离线安装过程中,我见过不少典型的报错。这里整理成一张排查表,按问题现象、可能原因、解决办法列出,大家照着排查就行。

报错现象可能原因解决办法
conda: command not found环境变量未配置或未重新加载检查~/.bashrc里的PATH,执行source ~/.bashrc;或在/etc/profile.d/下新建配置文件
GLIBC_2.28 not found系统glibc版本太低,新版Anaconda不兼容换用旧版Anaconda;或使用Miniconda;或升级系统组件
执行安装脚本时提示bunzip2: command not found目标机缺少bzip2依赖用系统包管理器安装bzip2,或将Anaconda安装脚本拷贝到联网机器解压后再传
Permission denied安装到没有写权限的目录用root用户安装,或改用用户home目录
conda install时长时间卡在Solving environment内网无法访问默认源设置conda config --set offline true;确认pkgs缓存已完整复制到目标机
运行Python时报Segmentation fault安装包损坏或架构不匹配校验SHA256,确认架构是x86_64还是aarch64,重新拷贝并安装
conda创建环境时提示PackagesNotFoundErrorpkgs缓存目录里缺少对应的包回到联网机器下载对应包,再复制到目标机pkgs目录

5.3 卸载Anaconda的标准动作

内网机器上卸载Anaconda,操作要谨慎,因为一旦删错目录,可能连系统现有的Python脚本都会受影响。标准卸载流程其实不复杂,但顺序很重要。

先备份自己创建的环境和配置文件。如果未来还要迁移到其他地方,先打包备份:

# 备份环境列表 conda env list > conda_envs_backup.txt # 备份用户配置 cp ~/.bashrc ~/.bashrc.anaconda.bak cp ~/.condarc ~/.condarc.bak 2>/dev/null

接着退出conda环境并删除整个安装目录。比如默认装到/root/anaconda3:

conda deactivate rm -rf /root/anaconda3

然后清理配置文件。交互式安装时conda会在~/.bashrc尾部写入一段初始化代码,需要手动删除或恢复之前备份的版本。如果使用的是/etc/profile.d/anaconda.sh,一并删掉:

rm -f /etc/profile.d/anaconda.sh

最后清理用户级缓存目录:

rm -rf ~/.conda rm -rf ~/.condarc

执行完这些操作后,重新登录一次终端,确认which conda已经没有输出了,说明卸载完成。

6. 离线环境维护的一点心得

离线环境的难点从来不是“装一次”本身,而是日后的维护迭代。Anaconda本体装好只是开始,后面每次要加一个新包、升级一个依赖,都得走一遍“联网机器下载、人工转移、内网安装”的流程。所以我的习惯是,在维护这类机器时额外准备一个完整离线物料包,里面包含Anaconda安装脚本、常用Python版本的conda包缓存、项目requirements离线目录、以及一份读取清单。每次执行部署时直接照着清单操作,能省下很多临时找包的时间。

还有一个细节:离线机器上如果设置了conda的镜像源(比如清华源),但机器本身无法访问外网,等conda连接镜像源超时就会白白等待很久。遇到这种情况,建议在~/.condarc里把channel保持默认,同时配合conda config --set offline true使用。让conda知道自己处于离线状态,比反复配置一堆本地源路径要简单可靠得多。

装完一套无网可用的Anaconda并跑通一个项目,那种感受还挺踏实的。希望这篇文章能帮你少绕一点弯路。如果过程中遇到特定的报错,把你贴出来的提示和当前系统的glibc、磁盘空间情况一起分析,基本都能定位到问题所在。

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

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

立即咨询