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

openEuler服务器没网怎么办?保姆级教程:从系统依赖到Python虚拟环境的全离线部署实录

openEuler服务器离线部署Python生产环境实战指南

当你面对一台全新的openEuler服务器,却发现它完全无法连接外网时,那种手足无措的感觉我深有体会。去年在给某金融机构部署内部系统时,我就遇到了这样的挑战——必须在严格的内网环境中从零搭建Python应用。本文将分享我总结的全套离线部署方案,从系统依赖排查到Python虚拟环境创建,手把手带你走出"无网困境"。

1. 环境准备与离线资源获取

1.1 搭建离线资源库

在没有网络的环境下工作,首要任务是建立完整的离线资源库。我通常会准备以下内容:

  • 系统依赖RPM包(约300MB)
  • Python解释器安装包(约30MB)
  • 项目依赖的wheel文件(视项目而定)
  • 必要的静态数据文件

获取系统依赖包的操作流程

# 在有网络的同版本openEuler系统上执行 mkdir -p /opt/offline_repo/{python,rpms} # 下载基础开发工具链 yum install -y yum-utils yumdownloader --resolve --destdir=/opt/offline_repo/rpms \ gcc gcc-c++ make openssl-devel bzip2-devel libffi-devel zlib-devel

1.2 准备Python环境

选择与生产环境匹配的Python版本至关重要。我推荐使用Miniconda作为基础环境:

# 下载Miniconda安装包(在有网络环境操作) wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /opt/offline_repo/python/miniconda.sh # 生成conda环境导出文件 conda create -n base_env python=3.8 conda env export -n base_env > /opt/offline_repo/python/environment.yml

2. 系统级依赖处理

2.1 离线安装基础组件

将准备好的离线资源拷贝到目标服务器后,开始系统级部署:

# 安装本地RPM包(需要root权限) rpm -ivh /opt/offline_repo/rpms/*.rpm --nodeps --force # 验证关键组件 gcc --version | head -n1 openssl version

2.2 处理常见依赖问题

即使准备充分,仍可能遇到依赖缺失。我的应急方案是:

  1. 使用yum provides查找缺失库文件:

    yum provides */libssl.so.1.1
  2. 通过ldd检查可执行文件依赖:

    ldd /usr/local/bin/python3 | grep "not found"
  3. 关键系统库对照表:

库文件所属RPM包典型问题表现
libcrypto.so.1.1openssl-libsSSL模块导入失败
libbz2.so.1bzip2-libs压缩相关功能报错
libffi.so.7libffictypes模块不可用

3. Python环境部署实战

3.1 离线安装Python解释器

# 安装Miniconda bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 # 初始化环境变量 source /opt/miniconda3/bin/activate conda init bash

3.2 创建虚拟环境

我的推荐做法是建立双层环境:

# 基础环境(包含常用工具) conda env create -f environment.yml -n base # 项目专用环境 conda create --clone base -n project_env conda activate project_env

4. 项目依赖离线安装

4.1 准备wheelhouse

在有网络的环境收集所有依赖:

pip download -r requirements.txt \ --platform manylinux2014_x86_64 \ --only-binary=:all: \ --dest ./wheelhouse

4.2 离线安装技巧

# 使用本地wheel文件安装 pip install --no-index --find-links=./wheelhouse -r requirements.txt # 处理特殊包的小技巧 for wheel in $(ls ./wheelhouse/*.whl); do pip install --no-deps $wheel done

5. 验证与故障排除

5.1 环境健康检查

# 检查Python模块导入 python -c "import ssl; print(ssl.OPENSSL_VERSION)" # 验证关键功能 python -m pytest tests/

5.2 常见错误解决方案

GLIBC版本问题

# 查看当前版本 ldd --version # 临时解决方案(不推荐长期使用) export LD_LIBRARY_PATH=/opt/glibc-2.28/lib:$LD_LIBRARY_PATH

架构不兼容问题

# 确认系统架构 uname -m # 重新打包时指定正确平台 pip download --platform manylinux2014_aarch64 package_name

6. 生产环境优化建议

在完成基础部署后,还需要考虑以下优化点:

  • 资源隔离:使用cgroups限制Python进程资源占用
  • 日志管理:配置logrotate防止日志文件膨胀
  • 启动管理:编写systemd服务单元文件

示例systemd配置:

[Unit] Description=Python Application After=network.target [Service] User=appuser Group=appgroup WorkingDirectory=/opt/your_project Environment="PATH=/opt/miniconda3/envs/project_env/bin" ExecStart=/opt/miniconda3/envs/project_env/bin/python main.py [Install] WantedBy=multi-user.target

7. 离线部署工具包维护

建立可持续维护的离线资源库需要:

  1. 定期更新安全补丁
  2. 维护版本清单文件
  3. 建立依赖关系图谱

我常用的维护命令:

# 生成RPM包清单 rpm -qa > rpm_installed.list # 导出conda环境 conda env export -n project_env > environment_frozen.yml # 检查安全更新(在有网络环境) yum updateinfo list security
http://www.jsqmd.com/news/642144/

相关文章:

  • 2026年最新杨梅酒生产厂家综合评测:口碑与实力兼具的品牌推荐 - 2026年企业推荐榜
  • 2026年至今内蒙古地区优质球冠形封头供应商综合评估与选型指南 - 2026年企业推荐榜
  • 2026年市政广场扫地机服务公司深度解析与选型指南 - 2026年企业推荐榜
  • Flink CDC 3.0.0 同步Oracle 19c数据,我踩过的那些坑(时区、字符集、权限)
  • 如何用3分钟告别网盘限速:八大平台直链下载助手终极指南
  • 2026年第二季度宁波婚纱摄影市场诚信服务商综合评估与选择指南 - 2026年企业推荐榜
  • iStore增强插件:从网络优化到智能家居,一站式解决家庭网关痛点
  • 2026年当下,探寻上海优质调料定制厂家的核心实力与选择之道 - 2026年企业推荐榜
  • PyCharm 格式化代码的5个高阶技巧:从自定义规则到批量处理
  • Rocky Linux 9.2网络配置与本地yum源搭建实战指南
  • 告别手动敲代码!Quartus Prime 21.1 一键生成 Testbench 并联动 Modelsim 仿真的保姆级教程
  • SMUDebugTool深度解析:解锁Ryzen处理器隐藏性能的专业硬件调试实战指南
  • 单细胞miloR实战:基于KNN图的差异丰度分析在疾病研究中的应用
  • 用 Cursor 重构 iOS App:从遗留代码到性能优化(附实战案例与规则模板)
  • SAP Fiori Elements实战:避开CDS View发布OData服务的那些‘坑’(以List Report为例)
  • pubmed的使用
  • 胶囊网络实战避坑指南:PyTorch代码逐行解析,带你绕过动态路由和重构损失的那些‘坑’
  • Vitis HLS Schedule Viewer保姆级解读:从代码到硬件调度,一张图看懂你的设计瓶颈
  • 从产线到道路:车载毫米波雷达标定全流程的工程实践与挑战
  • 【2024新版】BurpSuite零基础安装到实战指南(含JDK配置+Firefox插件调试)
  • 前端福音!VuReact v1.6.0 版本更新,让 Vue 转 React 更高效、更可靠
  • VSCode+CMake构建STM32高效开发环境的实战指南
  • 5分钟快速上手:Zotero茉莉花插件中文文献管理终极指南
  • libhv实战:300行代码构建一个C++高性能ProtoRPC网关
  • 如何3步完成抖音音频批量提取:douyin-downloader抖音下载器完整指南
  • 133. Rancher 2.12.x 升级失败:检测到 RKE1 NodeTemplate 资源
  • 告别GPIB和USB?用TCP/IP连接示波器:基于NI-VISA的Linux自动化测试实战
  • 逆向工程师的汇编速成课:如何用5条核心指令理解程序底层逻辑
  • AIAgent算力成本飙升?3步精准定位隐性开销并压降47%的实操指南
  • Go语言如何做速率限制_Go语言rate limiter教程【速学】