为统信UOS2.0离线安装python3.11.9开发环境
办公室统信Uos2.0没有公网访问权限,而我需要在办公室进行excel数据分析,于是想在能够上网的电脑上,安装部署一个python开发环境,再迁移到uos2.0系统上。通过两天的倒腾,在kimi的提示下,初步完成了这一目标。
一、在能够上网的windows11上,安装一个能够在uos2.0系统上运行的pyton3.11环境。
1.首先确定办公室uos2.0系统的系统架构
统信uos2.0是基于 Debian 10 的 arm64/amd64 双架构系统,在办公室uos2.0控制台中运行命令:
uname -m
结果是:aarch64
2.Arm64平台运行aarch64系统的方案
我的windows11电脑是arm64架构的,所以要在windows11上运行aarch64有两种方案:一种是Docker Desktop + binfmt,用Docker Desktop 的 binfmt/arm64 容器,跑 arm64v8/debian:10 容器当“下载机”,拉出 100% 兼容 UOS 的离线包。另一种是QEMU 虚拟机。我使用了第一种,理由是可以随时重置一个干净的debian容器,这对多次安装测试非常有利。
3.利用Docker部署debian10-aarch64系统
我的windows11系统上已经有了docker desktop,所以打开命令行:
# 启用 binfmt 自动拉取 arm64 模拟器
docker run --privileged --rm tonistiigi/binfmt --install arm64
# 验证
docker run --rm arm64v8/debian:10 uname -m
# → 应输出 aarch64
4.在windows11电脑上建立一个映射到虚拟机的交换目录
#windows上建立目录
mkdir d:\uos_dev
#启动名称为uos_python的debian新容器,进入容器内的bash控制台,映射将windows目录映射到容器/out目录上
docker run -it –name uos_python -v D:\uos_dev:/out \arm64v8/debian:10 bash
5. 换debian10的安装源
Kimi提示“Debian 10 官方仓库 2022-08 已把 backports 归档到 archive.debian.org”,因此要更换系统安装源
# 重写整个 sources.list(只用 archive.debian.org)
tee /etc/apt/sources.list <<'EOF'deb http://archive.debian.org/debian buster main contrib non-freedeb http://archive.debian.org/debian buster-backports main contrib non-freeEOF
# 删除重复源文件(消除 Warning)
rm -f /etc/apt/sources.list.d/buster-backports.list
# 允许访问归档
echo 'Acquire::Check-Valid-Until "false";' | tee /etc/apt/apt.conf.d/99-no-check
#更新
apt update
6. 下载编译环境及依赖
我在这个环节实际上消耗了较多的时间,因为docker拉取的debian10镜像仅是一个基础系统,其中没有编译环境,我一开始使用apt install build-essential时,出现了依赖缺失和版本冲突,我将缺失的系统库和版本冲突库罗列出来,增加缺失库,并将系统中版本冲突的库,用apt提示要示的版本替换,同时通测试安排正确的安装顺序,最终安装编译环境的命令为如下三个:
apt install uuid-runtime libc6=2.28-10+deb10u1 libc6-dev g++ dpkg-dev bzip2-doc \libbz2-1.0=1.0.6-9.2~deb10u1 libtinfo6=6.1+20181013-2+deb10u2 libgpm2 \libncursesw6=6.1+20181013-2+deb10u2 libncurses-dev libuuid1=2.33.1-0.1 \zlib1g=1:1.2.11.dfsg-1+deb10u1 \build-essential libssl-dev zlib1g-dev \libbz2-dev libreadline-dev libsqlite3-dev libffi-dev \libncursesw5-dev libgdbm-dev liblzma-dev uuid-dev
apt install -y python3-dev python3-pip
#下述第三个命令解决编译时缺失_dbm和_tkinter库的警告。Kimi提示“这些只是“可选扩展模块”缺失的友情提示,除非你真的需要 _tkinter(图形界面)或 _dbm(Berkeley DB),否则无需理会,Python 主程序照样能正常安装使用。如果你确实想“洁癖式”地补齐,再装下面几个包即可“。我恰巧是”洁癖式”的……
apt install -y libgdbm-dev tk-dev
二、在debian10容器中编译python3.11.9
1.下载python3.11.9.tgz
在windows11上下载https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz,将其放到d:\uos_dev目录中。
2.进入uos_python容器/out目录
cd /out
tar xf Python-3.11.9.tgz
cd Python-3.11.9
3.执行编译配置
./configure --enable-optimizations \--with-ensurepip=install \--prefix=/opt/python311
--enable-optimizations:启用 Profile-Guided Optimization,性能 ≈ 官方 deb。
--prefix=/opt/python311:与系统 /usr/bin/python3.7 隔离,安全升级。
注意/opt/python311这个目录很关键,因为在迁移时,要将编译后的python3.11.9包,存放到uos2.0系统相同的目录中。
运行configure需要一些时间,并且可能会出现一些警告提示,一般出行运行完成提示,就可以进行下一步make尝试。
4.编译
make -j$(nproc)
如果你足够幸运,且按前述操作准备好了编译环境,那可能跑一次就能编译成功了。
5. 安装
make altinstall
# 此命令运行后,将得到 /opt/python311/bin/python3.11
三、在debian10容器中配置python虚拟环境,以便于整体迁移
1.确认安装路径
若刚才配置 --prefix=/opt/python311 → 那么所有文件已在/opt/python311。
在/opt/python311目录下,有bin、lib/python3.11、 /include/python3.11、/share这4个子目录。
2.创建python3.11虚拟环境
进uos_python容器,执行下述命令
cd /out
/opt/python311/bin/python3.11 -m pip --version
/opt/python311/bin/python3.11 -m venv /out/py311-env
source /out/py311-env/bin/activate
python -c "import sys, ssl, sqlite3; print(sys.version)"
其中第2行和第4行用于验证python3.11安装结果
3.下载需要的库到debs和wheels文件夹
mkdir -p /out/py311-offline/debsmkdir -p /out/py311-offline/wheelspython -m pip download -d /out/py311-offline/wheels \pip setuptools wheel requests numpy pandas openpyxl python-docxpython -m pip download -d /out/py311-offline/wheels \jupyter jupyterlab onnx onnxruntime
4.把 Python 运行时依赖的 系统库 导出成 deb 列表
dpkg -l | awk '/lib(ssl|crypto|ffi|lzma|sqlite|gdbm|tk|ncurses|readline|zlib)/{print $2}' | sort -u > /tmp/py-deps.lstcd /out/py311-offline/debscat /tmp/py-deps.lst | xargs -i apt download {}
5. 复制 Python 3.11.9 整个 tree
mkdir -p /out/py311-offline/python3.11cp -a /opt/python311/* /out/py311-offline/python3.11/
6. 将虚拟环境移动到/out/py311-offline
mv /out/py311-env /out/py311-offline/
7. 生成一键环境脚本
tee /out/py311-offline/py311-activate.sh <<'EOF'
#!/bin/bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export PATH=$DIR/python3.11/bin:$PATH
export LD_LIBRARY_PATH=$DIR/python3.11/lib:$LD_LIBRARY_PATH
source $DIR/py311-env/bin/activate
EOF
chmod +x /out/py311-offline/py311-env.sh
8. 打包
cd /outtar czf py311-offline-uos.tar.gz py311-offline
9.将py311-offline-uos.tar.gz拷贝到U盘,复制到uos2.0中
至此,在wihdows11上debian10容器中的操作完成
四、向uos2.0迁移
1. 解包
打开uos2.0控制台,将py311-offline-uos.tar.gz复制到任一目录中,比如/data/home/user
cd /data/home/usertar xzf py311-offline-uos.tar.gzsudo mkdir /outln -s /data/home/user/py311-offline /out
2.将python3.11.9软件包复制到uos2.0系统的/opt/python311目录中
mkdir /p /opt/python311
cp -a /out/python3.11/* /opt/python311/
3.激活环境并安装包
cd /outsource ./ py311-activate.shpython -V #此时应该是3.11.9
4.如果python版本正确,则安装各程序包
python -m pip install --no-index --find-links=./wheels -U \pip setuptools wheel # 先升级工具本身
python -m pip install --no-index --find-links=./wheels \jupyter onnx onnxruntime numpy pandas openpyxl python-docx ##安装包
#验证
python -c "import sys, jupyter, onnx; print(sys.version)"
# 看到 3.11.9 且无 ImportError 即成功
5.运行jupyter
jupyter lab --no-browser --ip=0.0.0.0
五、需要说明的一些问题
1.在安装编译器和编译过程中,会出现很多依赖关系、错误、警告提示,建议手头的电脑随时打开一个AI工具如kimi或Deepseek,让AI帮助解决问题。
2.安装torch时,kimi提示说python3.11目前没有适配aarch64平台的torch版本,但是python3.9有,因为目前非必需,所认我没有偿试。
3.现在写代码,没有代码提示功能我基本就半废了,所以jupyter中的cell调试和代码提示是非常必要的。
kimi提示我:Jupyter 默认只提供最基础的「Tab 补全」和「Shift+Tab 文档弹窗」。
Cell 内逐行调试、函数签名悬浮提示、自动补全等高级功能 并非安装 jupyter 包后就自带,需要额外给 前端(Notebook/JupyterLab) 和 内核 各装一套插件。下面按「代码提示」和「可视化调试」两类功能给出离线可用方案,全部基于 wheel 安装,可在你的 UOS 2.0 环境直接复现。
(1)其中代码补全有两个方案:
A方案:代码智能提示(自动补全 + 签名悬浮)
在离线机(已激活 py311-env)执行
# 1. 下载离线包(在联网机预先抓 wheel)
pip download -d /out/py311-offline/wheels --only-binary=:all: \jupyter_contrib_nbextensions jupyter_nbextensions_configurator# 2. 离线安装
pip install --no-index --find-links=wheels \jupyter_contrib_nbextensions jupyter_nbextensions_configurator# 3. 安装 JS/CSS 并启用配置器
jupyter contrib nbextension install --sys-prefix
jupyter nbextensions_configurator enable --sys-prefix
启动 Notebook 后,浏览器会多出一个 Nbextensions 标签页
→ 取消右上角 “disable configuration”
→ 勾选 Hinterland(实时补全)
→ 可选勾选 Codefolding / ExecuteTime 等辅助扩展
保存即生效,无需重启服务器。
B方案:如果你更习惯 JupyterLab,则用 jupyterlab-lsp 方案:
pip download -d /out/py311-offline/wheels --only-binary=:all: \jupyterlab-lsp python-lsp-server[all]
pip install --no-index --find-links=wheels \jupyterlab-lsp python-lsp-server[all]
jupyter lab build # 离线前预先 build 好
(2)可视化调试(打断点、单步、查看变量)
Jupyter 官方调试协议要求 内核 + 前端 同时支持:
# xeus-python 已提供 cp311 linux_aarch64 官方 wheel
pip download -d /out/py311-offline/wheels --only-binary=:all: xeus-python
pip install --no-index --find-links=wheels xeus-python
# 注册内核
python -m xeus_python.install --sys-prefix
前端插件(JupyterLab ≥ 3 已内置,Notebook 需手动装)
-
新建笔记 → 菜单 Kernel → Change Kernel 选 xeus-python
-
右侧出现 Bug 图标(Debug 面板)
-
在代码行号点一下即可打断点,▶ Run ▶ Debug Cell 开始单步调试
可查看变量、调用栈、评估表达式,与 VSCode 体验类似。
上述代码补全和Cell内调试,我尚未偿试,在这里我将kimi的提示展示出来,有时间的朋友可以偿试一下,若能将结果也反馈给我,我将不胜感谢。
最后,还是希望统信uos能够发布一个完整的python离线安装包,实现一键离线部署,增强用户平台使用的体验。