总结:麒麟 V10 x86_64,从 Python3.7.9 → Python3.11.9 + 离线 whl + 源码交付
⚠️不是升级替换系统 Python3.7.9,系统 3.7.9 保留不动(保护 dnf 系统工具),独立编译安装 Python3.11.9,业务全部使用虚拟环境。
一、联网服务器 jnq‑bbt‑2(能上网)操作
1. 编译安装 Python3.11.9
#1.安装编译依赖
dnf install -y gcc gcc-c++ make zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel libuuid-devel gdbm-devel ncurses-devel
#2.下载源码
wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
tar -zxvf Python-3.11.9.tgz
cd Python-3.11.9
#3.编译,安装到独立目录,不覆盖系统python
./configure \
--prefix=/usr/local/python3119 \
--enable-optimizations \
--with-ensurepip=install
make -j$(nproc)
make altinstall校验:
/usr/local/python3119/bin/python3.11 --version
#输出 Python 3.11.92. backend 项目重建虚拟环境(抛弃旧的 3.7.9 的 venv)
cd /data/tangdou/backend
deactivate
rm -rf venv
#使用新编译的3.11.9创建虚拟环境
/usr/local/python3119/bin/python3.11 -m venv venv
source venv/bin/activate
#升级pip
pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装业务依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple此时
fastapi==0.115.0可以正常安装。
3. 生成【离线 whl 依赖包 + 源码包】(用于拷贝到无外网服务器)
方案 B 交付方式:目标离线服务器必须同样部署 Python3.11.9,可以修改源码。
source venv/bin/activate
mkdir -p ./offline_wheels
#把requirements.txt所有依赖下载为whl包到本地目录offline_wheels
pip download -r requirements.txt -d ./offline_wheels -i https://pypi.tuna.tsinghua.edu.cn/simple打包交付包(拷贝到离线服务器),需要复制的文件 / 目录:
backend/
├─ main.py #业务源码
├─ requirements.txt
├─ config/、templates/等业务资源
└─ offline_wheels/ #全部whl离线依赖包把上述业务文件打包压缩:
tar -zcvf backend_offline.tar.gz main.py requirements.txt config templates offline_wheels二、离线服务器两套场景
场景 A:离线服务器已经预先装好 Python3.11.9(同路径 /usr/local/python3119)
上传 backend_offline.tar.gz,解压:
tar -zxvf backend_offline.tar.gz
cd backend
#新建虚拟环境
rm -rf venv
/usr/local/python3119/bin/python3.11 -m venv venv
source venv/bin/activate
#离线安装whl,不访问网络
pip install --no-index --find-links=./offline_wheels -r requirements.txt启动服务:
uvicorn main:app --host 0.0.0.0 --port 8000优点:可修改源码;缺点:离线服务器必须提前部署 Python3.11.9。
场景 B:离线服务器完全没有外网、不想编译 Python → 使用 PyInstaller 二进制包(备选交付)
在联网 jnq‑bbt‑2(3.11.9 venv 环境)打包,产出完整运行目录,离线服务器不需要装 Python,直接运行。
source venv/bin/activate
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
#目录模式(推荐,不要onefile)
pyinstaller --noconsole --clean main.py拷贝整个 dist/main 文件夹到离线服务器直接运行:
./main三、如果离线服务器连 Python3.11.9 也没有(完整离线全量交付)
需要在联网机器把 Python3.11.9 编译依赖 rpm 包 + Python 源码一并下载,拷贝过去离线编译:
- 联网机器下载 rpm 依赖包:
mkdir -p /data/offline_py3119/rpms
cd /data/offline_py3119/rpms
dnf download --resolve gcc gcc-c++ make zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel libuuid-devel gdbm-devel ncurses-devel- 连同 Python‑3.11.9.tgz 一起打包传到离线服务器;
- 离线服务器本地安装 rpm:
dnf install ./*.rpm --nogpgcheck,再编译 Python3.11.9。
⚠️要求:两台服务器系统版本、CPU 架构必须完全一致(Kylin V10 x86_64)。
关键注意点
- 系统自带 python3.7.9 绝不删除、不替换软链接,否则 dnf、系统命令损坏。
- Python3.11.9 安装路径:
/usr/local/python3119,使用make altinstall。 - 虚拟环境必须使用新的 python3.11 二进制重新创建,旧 venv(3.7.9)直接删除,不能复用。
- whl 离线交付,两边 Python 主版本必须严格一致(3.11.9),小版本不一致会出现依赖报错。
- PyInstaller 打包只能在同系统同架构机器打包,Windows 不能打 Linux 包。
交付选型快速判断
表格
| 场景 | 方案 |
|---|---|
| 离线服务器允许部署 Python,后续要改代码 | 离线编译 Python3.11.9 + whl + 源码交付 |
| 离线服务器不想部署 Python,仅部署本后端服务 | PyInstaller 打包二进制目录交付 |