GIS开发 | 空间分析 | 软硬件技术
🌿 绿水青山就是金山银山 🌿

普通用户无 root 权限,Linux 使用 Miniconda 安装独立 Python3.10(不碰系统自带 Python)

适用场景:服务器仅分配普通账号、无 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,代表部署成功。

二、原理讲解(核心)

  1. 安装位置:$HOME/miniconda3$HOME 就是普通用户家目录,普通用户默认拥有读写权限,全程不需要 root。 conda 本体二进制文件、基础依赖、后续新建的所有虚拟环境,全部存放在这个目录下。
  2. PATH 环境变量隔离机制
  • 系统自带 Python:一般路径/usr/bin/python3,是系统全局程序,供 yum、系统内置脚本调用,严禁直接改动。
  • 执行source ~/miniconda3/bin/activate:仅仅修改当前这个 SSH 终端的 PATH 环境变量,把miniconda3/bin放到 PATH 搜索优先级最前面。 操作系统会优先调用这个目录下的 conda、python,而不是/usr/bin下面的系统 python。

这个环境变量修改只对当前 shell 会话生效,不会永久修改系统全局配置。

  1. conda 虚拟环境(py310) conda 可以在 miniconda 底座之上,再创建多个互相隔离的虚拟环境。py310环境内部单独封装一套 Python3.10 + pip,不同环境的依赖包完全隔离,A 环境安装的包,B 环境无法访问。
  2. 为什么不会影响系统 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 底座安装 ⚠️ 关键区分:

  1. miniconda 本体安装:完全离线,sh 脚本自带 conda 基础程序,不需要网络
  2. conda create -n py310 python=3.10:默认需要联网下载 Python 安装包,离线环境直接失败

推荐离线方案:conda-pack 环境打包迁移

适合:内网服务器,提前在同架构、能上网的 Linux 机器打包好完整环境(Python3.10 + 项目所有依赖)

⚠️ 重要约束:打包机器和目标服务器 GLIBC 版本必须一致,否则解压后报 glibc 版本不匹配!

  1. 在有外网的同架构、同 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
  1. 上传两个文件到离线内网服务器
  • Miniforge3-24.3.0-0-Linux-x86_64.sh
  • py310.tar.gz
  1. 离线服务器执行部署
# 第一步:安装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(部分机房默认关闭)

  1. 创建 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
  1. 加载、启用、启动
# 重载配置
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

九、常见踩坑说明

  1. 禁止使用sudo执行 conda 相关命令,会把环境安装到 root 目录,权限错乱;
  2. 不激活 conda 环境,which python指向系统 python;激活之后指向 conda 内 python;
  3. 不要随意删除$HOME/miniforge3 / $HOME/miniconda3文件夹,删除后整个 conda 环境全部失效;
  4. 注意用户目录磁盘配额,miniforge 加上依赖包占用空间较大;
  5. 部分服务器默认 shell 是 sh(dash),优先切换 bash 执行,避免 source 语法异常;
  6. 离线打包迁移:打包机器和目标服务器 GLIBC 版本必须一致,高 glibc 打包的包放到 CentOS7 会直接报错;
  7. 老版本 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 保持原样,系统业务不受干扰