离线 Python 环境部署流程文档
deploy_pkg 构建流程1.1 目标构建一个可在现场离线使用的 Python 环境包包含northland_deploy_pkg/ ├── bin/ │ └── uv ├── python/ │ └── Python 3.10.0 ├── wheelhouse/ │ └── 离线依赖 wheel 包 ├── requirements.lock.txt ├── install.sh └── run_env.sh说明目录/文件作用bin/uvuv 可执行文件用于创建虚拟环境和安装依赖python/随包携带的 Python 3.10.0wheelhouse/提前下载好的离线依赖包requirements.lock.txt固定版本后的依赖清单install.sh现场离线安装脚本run_env.sh现场激活虚拟环境脚本1.2 构建环境要求构建环境需要和现场机器架构一致。在构建机器执行uname -m命令说明命令说明uname -m查看 CPU 架构RK3568 通常应输出aarch64如果输出是x86_64则不能直接用于 RK3568 现场部署包构建。1.3 创建 deploy_pkg 目录mkdir -p /northland_deploy_pkg/{bin,python,wheelhouse} cd /northland_deploy_pkg命令说明命令说明bin存放 uvpython存放 Python 3.10.0wheelhouse存放离线依赖包1.4 安装并复制 uvcurl -LsSf https://astral.sh/uv/install.sh | sh命令说明命令说明curl -LsSf ...下载 uv 安装脚本sh执行安装脚本检查 uvwhich uv uv --version复制 uv 到部署包cp $(which uv) ./bin/uv chmod x ./bin/uv1.5 安装 Python 3.10.0要求 Python 版本必须是3.10.0不要只写3.10。export UV_PYTHON_INSTALL_DIR$PWD/python ./bin/uv python install 3.10.0命令说明命令说明export UV_PYTHON_INSTALL_DIR$PWD/python指定 Python 安装到当前部署包的 python/ 目录./bin/uv python install 3.10.0安装精确版本 Python 3.10.0查找 PythonPY310$(find $PWD/python -type f -name python3.10 | head -n 1) echo $PY310 $PY310 --version1.6 创建构建用虚拟环境./bin/uv venv .venv --python $PY310 --no-python-downloads --seed命令说明命令说明uv venv .venv创建虚拟环境--python $PY310使用部署包内的 Python 3.10.0--no-python-downloads禁止 uv 自动下载其他 Python--seed创建虚拟环境时安装 pip、setuptools、wheel 等基础工具检查版本.venv/bin/python --version .venv/bin/python -m pip --version1.7 安装依赖将项目的requirements.txt放到/northland_deploy_pkg/requirements.txt执行./bin/uv pip install --python .venv/bin/python -r requirements.txt如果需要安装开发依赖./bin/uv pip install --python .venv/bin/python -r requirements-dev.txt1.8 生成锁定依赖文件./bin/uv pip freeze --python .venv/bin/python requirements.lock.txt命令说明命令说明uv pip freeze输出当前虚拟环境中的完整依赖版本 requirements.lock.txt保存为固定版本依赖清单检查依赖冲突./bin/uv pip check --python .venv/bin/python1.9 下载离线依赖包.venv/bin/python -m pip download -r requirements.lock.txt -d wheelhouse命令说明命令说明pip download只下载依赖包不安装-r requirements.lock.txt按固定版本下载依赖-d wheelhouse将依赖包保存到 wheelhouse/ 目录1.10 处理源码包检查wheelhouse中是否还有源码包find wheelhouse -maxdepth 1 \( -name *.tar.gz -o -name *.zip \) -print命令说明命令说明find wheelhouse查找 wheelhouse 中的文件*.tar.gz / *.zip源码包格式没有输出表示依赖包都是 wheel适合离线安装如果存在源码包需要提前构建 wheel例如.venv/bin/python -m pip wheel --no-deps --no-build-isolation -w wheelhouse wheelhouse/psutil-5.9.8.tar.gz命令说明命令说明pip wheel将源码包构建成 wheel--no-deps不额外解析依赖--no-build-isolation不创建隔离构建环境-w wheelhouse将生成的 wheel 放回 wheelhouse构建成功后删除源码包rm -f wheelhouse/*.tar.gz wheelhouse/*.zip再次检查find wheelhouse -maxdepth 1 \( -name *.tar.gz -o -name *.zip \) -print如果无输出说明处理完成。1.11 本机离线模拟安装创建测试环境UV_OFFLINE1 ./bin/uv venv .venv_test --python $PY310 --no-python-downloads --seed离线安装依赖UV_OFFLINE1 ./bin/uv pip sync requirements.lock.txt --python .venv_test/bin/python \ --no-index \ --find-links wheelhouse \ --offline命令说明命令说明UV_OFFLINE1强制 uv 离线运行uv pip sync按 lock 文件同步安装依赖--no-index不访问 PyPI--find-links wheelhouse只从本地 wheelhouse 查找依赖--offline禁止联网检查依赖./bin/uv pip check --python .venv_test/bin/python测试核心依赖导入.venv_test/bin/python - PY import numpy import pandas import sklearn import scipy import torch import psutil import gflags print(offline dependency test ok) PY测试完成后删除测试环境rm -rf .venv_test1.12 编写 install.sh在/northland_deploy_pkg/install.sh中写入#!/usr/bin/env bash set -euo pipefail BASE$(cd $(dirname $0) pwd) UV$BASE/bin/uv export UV_OFFLINE1 export UV_LINK_MODEcopy PYTHON$(find $BASE/python -type f -name python3.10 | head -n 1) if [ -z $PYTHON ]; then echo ERROR: cannot find bundled python3.10 exit 1 fi echo Using Python: $PYTHON $PYTHON --version $PYTHON - PY import sys if sys.version_info[:3] ! (3, 10, 0): raise SystemExit(fERROR: Python version must be 3.10.0, current: {sys.version}) print(Python version check passed) PY $UV venv $BASE/.venv \ --python $PYTHON \ --no-python-downloads \ $UV pip sync $BASE/requirements.lock.txt \ --python $BASE/.venv/bin/python \ --no-index \ --find-links $BASE/wheelhouse \ --offline $UV pip check \ --python $BASE/.venv/bin/python echo Install finished. echo Activate with: echo source $BASE/.venv/bin/activate添加执行权限chmod x install.sh脚本说明内容说明set -euo pipefail遇到错误立即退出BASE...获取 install.sh 所在目录UV$BASE/bin/uv使用部署包内的 uvUV_OFFLINE1强制离线UV_LINK_MODEcopy使用复制模式避免硬链接问题find $BASE/python查找随包携带的 Pythonsys.version_info[:3] ! (3, 10, 0)严格校验 Python 必须是 3.10.0uv venv $BASE/.venv创建现场虚拟环境uv pip sync从本地 wheelhouse 安装依赖uv pip check检查依赖冲突1.13 编写 run_env.sh在/northland_deploy_pkg/run_env.sh中写入#!/usr/bin/env bash BASE$(cd $(dirname $0) pwd) source $BASE/.venv/bin/activate echo Virtual environment activated: which python python --version添加执行权限chmod x run_env.sh脚本说明内容说明source $BASE/.venv/bin/activate激活部署包中的虚拟环境which python查看当前使用的 Pythonpython --version确认 Python 版本1.14 打包 deploy_pkg打包前确认必要文件cd /northland_deploy_pkg ls bin/uv find python -type f -name python3.10 ls requirements.lock.txt ls install.sh run_env.sh find wheelhouse -maxdepth 1 -name *.whl | wc -l find wheelhouse -maxdepth 1 \( -name *.tar.gz -o -name *.zip \) -print要求检查项要求bin/uv必须存在python3.10必须存在requirements.lock.txt必须存在install.sh必须存在run_env.sh必须存在wheelhouse/*.whl必须存在*.tar.gz / *.zip最好没有输出打包# 返回northland_deploy_pkg的上一级 cd .. tar -zcvf northland_deploy_pkg.tar.gz \ --excludenorthland_deploy_pkg/.venv \ --excludenorthland_deploy_pkg/.venv_test \ --excludenorthland_deploy_pkg/.cache \ --excludenorthland_deploy_pkg/__pycache__ \ northland_deploy_pkg命令说明命令说明cd /进入根目录保证打包路径一致tar -zcvf使用 gzip 压缩打包--exclude.venv不打包构建用虚拟环境--exclude.venv_test不打包测试虚拟环境--exclude.cache不打包缓存northland_deploy_pkg需要打包的目录deploy_pkg 现场应用流程2.1 现场目录规划假设现场算法代码目录为/znv/newland/backendpackage/Northland-O_V2.10.001_20260513部署包建议解压到同级目录/znv/newland/backendpackage/northland_deploy_pkg最终结构/znv/newland/backendpackage/ ├── Northland-O_V2.10.001_20260513/ │ └── 现场算法代码 └── northland_deploy_pkg/ ├── bin/ ├── python/ ├── wheelhouse/ ├── requirements.lock.txt ├── install.sh └── run_env.sh说明目录说明Northland-O_V2.10.001_20260513原有算法代码目录northland_deploy_pkg离线 Python 环境包.venv执行 install.sh 后生成的虚拟环境2.2 上传部署包将以下文件上传到现场服务器/tmpnorthland_deploy_pkg.tar.gz2.3 解压部署包tar -zxvf northland_deploy_pkg.tar.gz -C /znv/newland/backendpackage解压后确认ls /znv/newland/backendpackage/northland_deploy_pkg应能看到bin python wheelhouse requirements.lock.txt install.sh run_env.sh2.4 执行 install.sh进入部署包目录cd /znv/newland/backendpackage/northland_deploy_pkg执行安装chmod x install.sh ./install.sh命令说明命令说明cd .../northland_deploy_pkg进入部署包目录chmod x install.sh给安装脚本添加执行权限./install.sh创建 .venv 并离线安装依赖安装成功后会生成/znv/newland/backendpackage/northland_deploy_pkg/.venv2.5 激活虚拟环境执行run_env.sh激活虚拟环境. run_env.sh检查当前 Pythonwhich python python --version期望结果/znv/newland/backendpackage/northland_deploy_pkg/.venv/bin/python Python 3.10.02.6 检查依赖如果当前 shell 已经激活.venv可以执行python -m pip check测试核心依赖python - PY import numpy import pandas import sklearn import scipy import torch import psutil import gflags print(dependency ok) PY2.7 运行现场算法激活虚拟环境后进入算法目录cd /znv/newland/backendpackage/Northland-O_V2.10.001_20260513然后按原有方式执行算法即可。如果原有启动命令是 shell 脚本例如./start.sh则执行source /znv/newland/backendpackage/northland_deploy_pkg/.venv/bin/activate cd /znv/newland/backendpackage/Northland-O_V2.10.001_20260513 ./start.sh注意如果start.sh中写死了/usr/bin/python3则不会使用虚拟环境 Python需要将启动脚本中的 Python 命令改成python或在启动脚本前显式激活虚拟环境。2.9 退出虚拟环境deactivate

相关新闻

科研配图不用 Origin!okbiye AI 科研绘图,文字描述一键生成学术图纸

科研配图不用 Origin!okbiye AI 科研绘图,文字描述一键生成学术图纸

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图科研绘图 - Okbiye智能写作https://www.okbiye.com/drawing 一、学术制图的现实难题,多数毕业生都被困在这里 不管是本科课程论文,还是硕博 SCI 期刊稿件,正文内容…

2026/6/27 9:50:02阅读更多 →
限时解锁!IntelliJ 2024.2最新Live Templates API深度适配方案(含Spring Boot 3.3兼容补丁)

限时解锁!IntelliJ 2024.2最新Live Templates API深度适配方案(含Spring Boot 3.3兼容补丁)

更多请点击: https://kaifayun.com 第一章:IntelliJ Live Templates 的核心机制与演进脉络 IntelliJ IDEA 的 Live Templates 并非简单的文本替换工具,而是一套深度集成于编辑器语义分析层的动态代码生成系统。其核心依赖于 PSI(…

2026/6/27 9:45:02阅读更多 →
DXVK深度优化指南:5大技巧解决纹理过滤与游戏兼容性问题

DXVK深度优化指南:5大技巧解决纹理过滤与游戏兼容性问题

DXVK深度优化指南:5大技巧解决纹理过滤与游戏兼容性问题 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk DXVK作为基于Vulkan的Direct3D实现层,已…

2026/6/27 9:45:02阅读更多 →
N_m3u8DL-RE:像保存本地文件一样轻松下载在线流媒体视频

N_m3u8DL-RE:像保存本地文件一样轻松下载在线流媒体视频

N_m3u8DL-RE:像保存本地文件一样轻松下载在线流媒体视频 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE …

2026/6/27 11:30:14阅读更多 →
DLSS Swapper:游戏画质升级的智能管家,从手动替换到自动化管理

DLSS Swapper:游戏画质升级的智能管家,从手动替换到自动化管理

DLSS Swapper:游戏画质升级的智能管家,从手动替换到自动化管理 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在游戏图形技术快速迭代的今天,DLSS(深度学习超采样&#…

2026/6/27 11:30:14阅读更多 →
蔡司扫描电镜(EVO/Sigma/MERLIN)金属零部件清洁度完整检测方案

蔡司扫描电镜(EVO/Sigma/MERLIN)金属零部件清洁度完整检测方案

适配标准:VDA 19、ISO 16232,核心依靠「滤膜萃取 SEM 形貌成像 EDS 元素定性 SmartPI 全自动颗粒分析」,精准区分金属磨屑、非金属杂质、纤维、氧化物,完成尺寸分级、数量统计、溯源判定。 蔡司EVO SEM清洁度检测台 滤膜样品制…

2026/6/27 11:30:14阅读更多 →
从零构建现代化硬盘监测工具:DiskInfo完整开发实战指南

从零构建现代化硬盘监测工具:DiskInfo完整开发实战指南

从零构建现代化硬盘监测工具:DiskInfo完整开发实战指南 【免费下载链接】DiskInfo DiskInfo based on CrystalDiskInfo 项目地址: https://gitcode.com/gh_mirrors/di/DiskInfo 在当今数据驱动的时代,硬盘健康监测已成为系统管理员和开发者的必备…

2026/6/27 11:30:14阅读更多 →
就这样开始吧

就这样开始吧

开始 早晨对象给做了一碗生日面条,吃完上班,摸鱼中决定做一些什么。 找出了大学时注册的CSDN账号,删除了所有记录,关联了部分信息,决定写写博客。 写博客的目的是什么? 有一个地方能放松自己的心情。现在自…

2026/6/27 11:30:14阅读更多 →
DLSS Swapper终极指南:一键管理游戏DLSS版本的免费工具

DLSS Swapper终极指南:一键管理游戏DLSS版本的免费工具

DLSS Swapper终极指南:一键管理游戏DLSS版本的免费工具 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为NVIDIA显卡用户设计的智能工具,能够让你轻松下载、管理和切换游戏…

2026/6/27 11:25:13阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/27 11:20:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/27 5:46:02阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/27 11:20:39阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →