Skip to content

总结:麒麟 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.9

2. 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 源码一并下载,拷贝过去离线编译:

  1. 联网机器下载 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
  1. 连同 Python‑3.11.9.tgz 一起打包传到离线服务器;
  2. 离线服务器本地安装 rpm:dnf install ./*.rpm --nogpgcheck,再编译 Python3.11.9。

⚠️要求:两台服务器系统版本、CPU 架构必须完全一致(Kylin V10 x86_64)。


关键注意点 ​

  1. 系统自带 python3.7.9 绝不删除、不替换软链接,否则 dnf、系统命令损坏。
  2. Python3.11.9 安装路径:/usr/local/python3119,使用make altinstall。
  3. 虚拟环境必须使用新的 python3.11 二进制重新创建,旧 venv(3.7.9)直接删除,不能复用。
  4. whl 离线交付,两边 Python 主版本必须严格一致(3.11.9),小版本不一致会出现依赖报错。
  5. PyInstaller 打包只能在同系统同架构机器打包,Windows 不能打 Linux 包。

交付选型快速判断 ​

表格

场景方案
离线服务器允许部署 Python,后续要改代码离线编译 Python3.11.9 + whl + 源码交付
离线服务器不想部署 Python,仅部署本后端服务PyInstaller 打包二进制目录交付

Released under the MIT License.