适用场景:服务器仅分配普通账号、无 root 权限,无法通过 yum/apt 安装高版本 Python,不想污染系统自带 Python 环境,隔离项目依赖;支持内网离线部署。
前言
很多外包、企业内网服务器,只给普通用户账号,没有 root 权限,不能直接执行yum install python3.10、也不能升级系统自带 Python。 系统自带 Python 版本往往偏低(常见 3.6/3.7),大量新 SDK、框架直接语法报错。 Miniconda 是非常合适的方案:全部安装在你的用户家目录$HOME下面,完全独立,不会修改、覆盖系统自带 Python,服务器重启、SSH 重连之后也可以正常使用。
核心一句话:Miniconda 只是部署在用户目录内的环境管理器,和系统 Python 是两套完全隔离的运行环境,互不干扰。
一、在线部署全套命令(有外网服务器)
# 1. 清华镜像下载miniconda安装脚本(国内速度快)
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 2. 静默安装,-b 静默模式,-p 指定安装路径到当前用户家目录
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
# 3. 临时激活conda基础base环境(仅当前SSH会话生效)
source ~/miniconda3/bin/activate
# 4. 创建名称为py310的虚拟环境,内置python3.10,自动确认
conda create -n py310 python=3.10 -y
# 5. 激活py310环境,此时调用python就是3.10版本
conda activate py310
执行完成后,在当前窗口验证版本:
python --version
输出Python 3.10.x,代表部署成功。
二、原理讲解(核心)
- 安装位置:
$HOME/miniconda3$HOME就是普通用户家目录,普通用户默认拥有读写权限,全程不需要 root。 conda 本体二进制文件、基础依赖、后续新建的所有虚拟环境,全部存放在这个目录下。 - PATH 环境变量隔离机制
- 系统自带 Python:一般路径
/usr/bin/python3,是系统全局程序,供 yum、系统内置脚本调用,严禁直接改动。 - 执行
source ~/miniconda3/bin/activate:仅仅修改当前这个 SSH 终端的 PATH 环境变量,把miniconda3/bin放到 PATH 搜索优先级最前面。 操作系统会优先调用这个目录下的 conda、python,而不是/usr/bin下面的系统 python。
这个环境变量修改只对当前 shell 会话生效,不会永久修改系统全局配置。
- conda 虚拟环境(py310) conda 可以在 miniconda 底座之上,再创建多个互相隔离的虚拟环境。
py310环境内部单独封装一套 Python3.10 + pip,不同环境的依赖包完全隔离,A 环境安装的包,B 环境无法访问。 - 为什么不会影响系统 Python?
- 没有写入
/usr、/bin、/lib等系统保护目录; - 不会替换系统的 python 软链接;
- 不激活 conda 环境的时候,直接调用
python/python3依旧是系统原版; - 所有文件都限制在当前用户目录,服务器其他用户看不到你的 conda 环境。
对比:pyenv 思路类似,但 pyenv 需要现场编译 Python,依赖 gcc 等编译组件;miniconda 直接分发预编译好的 Python 二进制,对无 root 服务器更加友好。
三、SSH 断开、服务器重启后,如何重新使用 Python3.10
重点提醒:
source activate只是临时生效,SSH 关闭、服务器重启,环境变量会丢失,不会自动保留。
方式 1:手动激活(调试、临时使用,推荐)
每次重新 SSH 连上服务器,依次执行:
# 第一步:加载conda基础环境
source ~/miniconda3/bin/activate
# 第二步:激活py310环境
conda activate py310
# 验证版本
python --version
执行完毕,即可进入 Python3.10 环境。
方式 2:配置.bashrc,登录自动初始化 conda
推荐配置:自动加载 conda,但是不会自动激活 py310,避免不小心跑程序用错环境。 编辑
.bashrc:
vim ~/.bashrc
在文件末尾追加下面代码:
# conda initialize
if [ -f "$HOME/miniconda3/bin/activate" ]; then
. "$HOME/miniconda3/bin/activate"
fi
保存退出,让配置立即生效:
source ~/.bashrc
✅ 之后每次 SSH 登录进来,conda 命令直接可用,只需要再执行一句:
conda activate py310
不推荐默认登录自动激活 py310,容易混淆环境;如果有特殊需求,可以在上面代码末尾追加
conda activate py310。
方式 3:后台常驻运行服务(生产程序首选,你的智能体 / 上传服务适用)
后台启动程序,不能依赖交互式 shell 激活环境,直接使用 Python 绝对路径启动,最稳定,不受登录 shell 影响,服务器重启后脚本拉起也正常。
# 直接调用py310环境内的python,不需要激活conda
nohup ~/miniconda3/envs/py310/bin/python main.py > app.log 2>&1 &
四、配置清华镜像源(加速 conda、pip 下载)
建议装好 miniconda 之后优先配置,国内下载速度提升非常明显,避免超时。
4.1 conda 清华源配置
# 创建conda配置文件
vim ~/.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/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
保存后清理缓存:
conda clean -i
4.2 pip 清华源(两种方式任选其一)
方式 A:全局配置(当前用户永久生效)
mkdir -p ~/.pip
vim ~/.pip/pip.conf
写入:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
方式 B:单次安装临时指定源
pip install wecom-aibot-python-sdk -i https://pypi.tuna.tsinghua.edu.cn/simple
五、离线部署方案(内网隔离服务器,无外网)
✅ 可以离线安装,仅上传Miniconda3-latest-Linux-x86_64.sh脚本,只能完成 miniconda 底座安装 ⚠️ 关键区分:
- miniconda 本体安装:完全离线,sh 脚本自带 conda 基础程序,不需要网络
conda create -n py310 python=3.10:默认需要联网下载 Python 安装包,离线环境直接失败
推荐离线方案:conda-pack 环境打包迁移
适合:内网服务器,提前在同架构、能上网的 Linux 机器打包好完整环境(Python3.10 + 项目所有依赖)
⚠️ 重要约束:打包机器和目标服务器 GLIBC 版本必须一致,否则解压后报 glibc 版本不匹配!
- 在有外网的同架构、同 glibc 版本 Linux 机器上操作
# 安装miniforge/miniconda、创建py310环境
bash Miniforge3-24.3.0-0-Linux-x86_64.sh -b -p $HOME/miniforge3
source ~/miniforge3/bin/activate
conda create -n py310 python=3.10 -y
conda activate py310
# 安装你的项目全部依赖,示例:
pip install wecom-aibot-python-sdk
# 安装打包工具conda-pack
pip install conda-pack
# 打包整个py310环境,输出压缩包
conda pack -n py310 -o py310.tar.gz
- 上传两个文件到离线内网服务器
Miniforge3-24.3.0-0-Linux-x86_64.shpy310.tar.gz
- 离线服务器执行部署
# 第一步:安装miniforge底座(可选,如果只是运行程序,这一步可以跳过)
bash Miniforge3-24.3.0-0-Linux-x86_64.sh -b -p $HOME/miniforge3
source ~/miniforge3/bin/activate
# 第二步:解压导入打包好的py310环境
mkdir -p ~/py310
tar -xzf py310.tar.gz -C ~/py310
# 【必执行】修复环境内部路径,conda-pack固定步骤
source ~/py310/bin/activate
conda-unpack
部署完成后,正常使用:
conda activate py310
python --version
六、普通用户 systemd 托管服务(可选,生产稳定托管)
注意:是用户级 systemd,不需要 root,服务器开机自动拉起你的 Python 程序。 前提:服务器开启了用户 session lingering(部分机房默认关闭)
- 创建 service 文件
mkdir -p ~/.config/systemd/user
vim ~/.config/systemd/user/py310-app.service
内容示例:
[Unit]
Description=Python3.10 App running on miniforge py310
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/你的用户名/项目目录
ExecStart=/home/你的用户名/py310/bin/python main.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
- 加载、启用、启动
# 重载配置
systemctl --user daemon-reload
# 开机自启
systemctl --user enable py310-app.service
# 启动服务
systemctl --user start py310-app.service
# 查看日志
journalctl --user -u py310-app.service -f
开机自启生效前提:执行一次
loginctl enable-linger 你的用户名;如果这条命令报错,说明机房不支持用户级自启,改用 nohup+crontab 方案。
七、CentOS7 专属兼容方案(GLIBC 2.17)
报错 1:Installer requires GLIBC >=2.28, but system has 2.17.
原因:新版 Miniconda、新版 Miniforge 编译依赖高版本 GLIBC;CentOS7 系统 glibc 固定 2.17,严禁直接升级 glibc,极易系统崩溃。 解决:使用 Miniforge3-24.3.0-0 这个旧版本,编译基线适配 glibc2.17。
报错 2:清华镜像下载返回 403 Forbidden
老版本 github-release 目录,清华镜像做了权限限制,访问 403。 优先使用 ghproxy 代理下载,备选南京大学镜像:
# 方案1 ghproxy代理(优先尝试)
wget https://gh-proxy.com/https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Miniforge3-24.3.0-0-Linux-x86_64.sh
# 方案2 南京大学镜像(代理失效时切换)
wget https://mirror.nju.edu.cn/github-release/conda-forge/miniforge/24.3.0-0/Miniforge3-24.3.0-0-Linux-x86_64.sh
安装命令:
bash Miniforge3-24.3.0-0-Linux-x86_64.sh -b -p $HOME/miniforge3
source ~/miniforge3/bin/activate
conda create -n py310 python=3.10 -y
conda activate py310
兜底方案:静态独立 Python(无 conda)
如果 miniforge 也无法下载,直接使用 indygreg 静态编译 python3.10,原生兼容 glibc2.17,解压即用,不依赖 conda:
wget https://gh-proxy.com/https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.10.13+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz
tar -zxvf cpython-3.10.13+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz -C ~/
使用方式:~/python/bin/python3.10 缺点:没有 conda 环境隔离,适合单脚本项目。
八、日常常用命令汇总
# 查看本机所有conda环境
conda env list
# 退出当前conda环境(回到base)
conda deactivate
# 删除不需要的环境(示例删除py310)
conda remove -n py310 --all -y
# 激活环境后安装依赖包
pip install xxx
# 查看当前python路径,确认是否为conda环境
which python
九、常见踩坑说明
- 禁止使用
sudo执行 conda 相关命令,会把环境安装到 root 目录,权限错乱; - 不激活 conda 环境,
which python指向系统 python;激活之后指向 conda 内 python; - 不要随意删除
$HOME/miniforge3/$HOME/miniconda3文件夹,删除后整个 conda 环境全部失效; - 注意用户目录磁盘配额,miniforge 加上依赖包占用空间较大;
- 部分服务器默认 shell 是 sh(dash),优先切换 bash 执行,避免 source 语法异常;
- 离线打包迁移:打包机器和目标服务器 GLIBC 版本必须一致,高 glibc 打包的包放到 CentOS7 会直接报错;
- 老版本 miniforge 镜像下载注意:清华镜像老 release 目录会 403,优先 ghproxy 代理。
十、验证:系统 Python 完好,没有被改动
新开一个干净 SSH 窗口,不执行任何 conda 激活命令
which python3
python3 --version
输出路径为/usr/bin/python3,版本为服务器原始系统版本,证明系统 Python 完全没有被改动,yum、系统脚本不受任何影响。
十一、总结
Miniconda / Miniforge 的核心本质:在普通用户家目录部署一套独立的 Python 生态,依靠 shell 的 PATH 变量优先级切换解释器,全程不触碰系统全局文件,天然适配无 root 部署,环境互相隔离。
- 调试开发:SSH 登录 → 加载 conda → activate py310
- 后台常驻服务:直接使用绝对路径启动,稳定可靠
- CentOS7 (glibc2.17):固定使用 Miniforge3-24.3.0-0,镜像优先 ghproxy 代理
- 离线内网:同 glibc 版本机器 conda-pack 打包迁移
- 国内加速:配置清华 conda+pip 源
- 安全底线:系统 Python 保持原样,系统业务不受干扰