当前位置: 首页 > news >正文

为统信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 Kernelxeus-python

  • 右侧出现 Bug 图标(Debug 面板)

  • 在代码行号点一下即可打断点,▶ Run ▶ Debug Cell 开始单步调试
    可查看变量、调用栈、评估表达式,与 VSCode 体验类似。

上述代码补全和Cell内调试,我尚未偿试,在这里我将kimi的提示展示出来,有时间的朋友可以偿试一下,若能将结果也反馈给我,我将不胜感谢。

最后,还是希望统信uos能够发布一个完整的python离线安装包,实现一键离线部署,增强用户平台使用的体验。

http://www.dtcms.com/a/392535.html

相关文章:

  • Maven 进阶:依赖管理的 “坑” 与解决方案
  • 2.15Vue全家桶-VueRouter
  • 五、Maven引入
  • 通过 TypeScript 在 Vue 3 中利用类型系统优化响应式变量的性能
  • Maven 入门:从 “手动导包” 到 “自动化构建” 的第一步
  • 【Python】数组
  • AI任务相关解决方案18-基于大模型、MCP、Agent与RAG技术的数据分析系统研究报告
  • 飞牛NAS系统版本重大更新:支持挂载115网盘!挂载教程来袭!
  • SpringAI、Dify与Ollama的技术落地与协作
  • Python Selenium 核心技巧与实战:从基础操作到极验滑动验证码破解
  • PyQt6 实战:多源输入 ASCII 艺术转换器全解析(图片 / 视频 / 摄像头实时处理 + 自定义配置)
  • Java 大视界 —— Java 大数据在智能农业病虫害精准识别与绿色防控中的创新应用
  • Qt qDebug()调试函数,10分钟讲清楚
  • Go语言基于 DDD(Domain Driven Design)领域驱动设计架构实现备忘录 todolist
  • Go基础:Go变量、常量及运算符详解
  • c++如何开发游戏
  • 3D体素(Voxel)算法原理内容综述
  • 家庭劳务机器人进化史:从单一功能到全能管家的四阶跃迁
  • 【工具推荐及使用】——基于pyecharts的Pythpn可视化
  • Transformer实战(19)——微调Transformer语言模型进行词元分类
  • ModelView【QT】
  • ES6 promise-try-catch-模块化开发
  • webrtc弱网-ProbeController类源码分析与算法原理
  • Pycharm远程同步Jetson Orin Super
  • 深入解析Tomcat类加载器:为何及如何打破Java双亲委派模型
  • 基于BP神经网络的PID控制器matlab参数整定和性能仿真
  • RabbitMQ死信队列与幂等性处理的性能优化实践指南
  • 基于python全国热门景点旅游管理系统的设计与实现
  • 鸿蒙Next ArkTS卡片生命周期:深入理解与管理实践
  • 荣耀手机(安卓)快速传数据换机到iPhone17 Pro