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

Ubuntu 22.04 离线环境下 Python 包与 FFmpeg 安装全攻略​

Ubuntu 22.04 离线环境下 Python 包与 FFmpeg 安装全攻略
在没有网络连接的 Ubuntu 22.04 环境中安装软件包常常会遇到各种依赖问题,尤其是 Python 库和 FFmpeg 这类依赖复杂的工具。
本文将详细介绍如何在离线环境中安装指定的 Python 包(包括 OpenCV、PyTorch 等)和 FFmpeg,并解决常见的依赖冲突问题。

离线安装 Python 包全流程

准备工作:在有网络的机器上下载包

首先需要在有网络的 Ubuntu 机器上(建议与目标机器系统版本和架构一致)下载所需的 Python 包及其依赖。
创建下载脚本download_packages.sh:

#!/bin/bash# 创建存放包的目录
mkdir -p python_packages
cd python_packages# 下载普通Python包
pip download -i https://pypi.tuna.tsinghua.edu.cn/simple \opencv-python \requests \pillow \pyyaml \numpy==1.26.4# 下载PyTorch相关包
pip download --no-cache-dir torch torchvision torchaudio \--index-url https://download.pytorch.org/whl/cu121echo "所有包已下载到 python_packages 目录"

运行脚本下载包:

chmod +x download_packages.sh
./download_packages.sh

处理依赖冲突问题

在离线安装过程中,最常见的问题是依赖冲突。当出现类似以下错误时:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
tables 3.8.0 requires blosc2~=2.0.0, which is not installed.
tables 3.8.0 requires cython>=0.29.21, which is not installed.
gensim 4.3.0 requires FuzzyTM>=0.4.0, which is not installed.
numba 0.57.1 requires numpy<1.25,>=1.21, but you have numpy 1.26.4 which is incompatible.

我们需要补充下载缺失的依赖包并按正确顺序安装:
创建补充下载脚本download_missing_deps.sh:

#!/bin/bash# 进入之前的包目录
cd python_packages# 补充下载缺失的依赖
pip download -i https://pypi.tuna.tsinghua.edu.cn/simple \blosc2~=2.0.0 \cython>=0.29.21 \FuzzyTM>=0.4.0 \numba>=0.58.0  # 升级numba到兼容numpy 1.26.4的版本

离线安装脚本
将下载好的python_packages目录传输到离线机器后,创建安装脚本install_packages.sh:

#!/bin/bash# 进入包目录
cd python_packages# 1. 先安装缺失的基础依赖
pip install --no-index --find-links=. \blosc2~=2.0.0 \cython>=0.29.21 \FuzzyTM>=0.4.0# 2. 升级numba到兼容numpy 1.26.4的版本(解决核心冲突)
pip install --no-index --find-links=. numba>=0.58.0 --upgrade# 3. 安装原本需要的包
pip install --no-index --find-links=. \opencv-python \requests \pillow \pyyaml \numpy==1.26.4 \torch torchvision torchaudioecho "所有包安装完成(已处理依赖冲突)"

运行安装脚本:

chmod +x install_packages.sh
./install_packages.sh

处理版本冲突的特殊情况

当遇到类似pyfume 0.3.4 requires numpy==1.24.4这样的版本冲突时,有两种解决方案:

1. 升级冲突包(优先选择):

# 在有网络机器上下载兼容版本
pip download -i https://pypi.tuna.tsinghua.edu.cn/simple pyfume>=0.3.5# 在离线机器上安装
pip install --no-index --find-links=. pyfume>=0.3.5 --upgrade

2. 降低依赖包版本(备选方案):

# 在离线机器上强制安装兼容版本
pip install --no-index --find-links=. numpy==1.24.4 --force-reinstall

离线安装 FFmpeg 的完整方案

下载 FFmpeg 及依赖包

在有网络的机器上创建下载脚本download_ffmpeg_fixed.sh:

#!/bin/bash# 创建存放deb包的目录
mkdir -p ffmpeg_debs
cd ffmpeg_debs# 安装必要工具
sudo apt-get update
sudo apt-get install -y apt-rdepends# 下载ffmpeg及依赖包(直接列出所有需要的包)
apt-get download $(apt-rdepends \ffmpeg \libblas3 \libjack-jackd2-0 \liblapack3 \ocl-icd-libopencl1 \debconf \| grep -v "^ " | sort -u | grep -v "^$")echo "ffmpeg及依赖包已下载到ffmpeg_debs目录"

运行脚本:

chmod +x download_ffmpeg_fixed.sh
bash download_ffmpeg_fixed.sh  # 明确使用bash执行

解决虚拟包依赖问题

如果遇到类似Can’t select candidate version from package libblas.so.3的错误,是因为这些是虚拟包,需要使用实际提供这些功能的包:

虚拟包实际提供者
libblas.so.3libblas3
libjack-0.125libjack-jackd2-0
liblapack.so.3liblapack3
libopencl-1.2-1 和 libopencl1ocl-icd-libopencl1
debconf-2.0debconf

离线安装 FFmpeg

将ffmpeg_debs目录传输到离线机器后,执行以下命令安装:

cd ffmpeg_debs
sudo dpkg -i *.deb# 修复可能的依赖问题
sudo apt-get -f install

安装完成后验证:

ffmpeg -version

如果显示版本信息,则表示安装成功。

总结与注意事项

环境一致性: 确保下载包的机器与离线机器具有相同的操作系统版本和架构;
依赖处理: 离线安装的核心是完整获取所有依赖,包括直接依赖和间接依赖;
安装顺序: 先解决依赖冲突,再安装主要包,可减少很多问题;
虚拟包处理: 对于系统包,要识别虚拟包并使用实际提供者;
版本兼容: 注意 Python 库之间的版本兼容性,尤其是 numpy 等基础库;

通过以上方法,你可以在完全离线的 Ubuntu 22.04 环境中成功安装所需的 Python 包和 FFmpeg 工具。
如果遇到其他依赖问题,可按照类似思路查找缺失的依赖并补充下载。

http://www.lryc.cn/news/617141.html

相关文章:

  • Python 爬虫:Selenium 自动化控制(Headless 模式 / 无痕浏览)
  • 使用Windbg分析多线程死锁项目实战问题分享
  • 从零开始的云计算生活——第四十一天,勇攀高峰,Kubernetes模块之单Master集群部署
  • 数据结构 双链表与LinkedList
  • 云原生环境Prometheus企业级监控
  • 浅谈 LangGraph 子图流式执行(subgraphs=True/False)模式
  • redis(2)-java客户端使用(IDEA基于springboot)
  • Selenium动态元素定位
  • glide缓存策略和缓存命中
  • 探秘华为:松山湖的科技与浪漫之旅
  • 打烊:餐厅开业前的“压力测试”
  • 《汇编语言:基于X86处理器》第13章 高级语言接口(1)
  • 前端实现 MD5 + AES 加密的安全登录请求
  • JVM基础【Java】
  • leetcode-hot-100 (图论)
  • 心理咨询|学生心理咨询评估系统|基于Springboot的学生心理咨询评估系统设计与实现(源码+数据库+文档)
  • python面向对象设计模式
  • 电子电气架构 --- 软件定义汽车的驱动和挑战
  • 飞算JavaAI vs 传统开发:效率与质量的双重突破
  • 【MySQL✨】服务器安装 MySQL 及配置相关操作
  • Orange的运维学习日记--38.MariaDB详解与服务部署
  • B站直播, 拼接4个窗口,能否实现
  • Deepoc如何让传统码垛机器人获得“类人决策力“​
  • 服务器配置实战:从 “密码锁” 到 “分工协作” 的知识点详解
  • docter的使用、vscode(cursor)和docker的连接,详细分析说明
  • Django Request 与 DRF Request 的区别
  • 低代码开发实战案例,如何通过表单配置实现数据输入、数据存储和数据展示?
  • 智能双行框!百度全量上线AI搜索,是革新浪潮还是昙花一现?
  • ECCV 2024 论文解读丨具身智能、机器人研究最新突破创先点分享合集
  • SQL刷题