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.3 | libblas3 |
libjack-0.125 | libjack-jackd2-0 |
liblapack.so.3 | liblapack3 |
libopencl-1.2-1 和 libopencl1 | ocl-icd-libopencl1 |
debconf-2.0 | debconf |
离线安装 FFmpeg
将ffmpeg_debs目录传输到离线机器后,执行以下命令安装:
cd ffmpeg_debs
sudo dpkg -i *.deb# 修复可能的依赖问题
sudo apt-get -f install
安装完成后验证:
ffmpeg -version
如果显示版本信息,则表示安装成功。
总结与注意事项
环境一致性: 确保下载包的机器与离线机器具有相同的操作系统版本和架构;
依赖处理: 离线安装的核心是完整获取所有依赖,包括直接依赖和间接依赖;
安装顺序: 先解决依赖冲突,再安装主要包,可减少很多问题;
虚拟包处理: 对于系统包,要识别虚拟包并使用实际提供者;
版本兼容: 注意 Python 库之间的版本兼容性,尤其是 numpy 等基础库;
通过以上方法,你可以在完全离线的 Ubuntu 22.04 环境中成功安装所需的 Python 包和 FFmpeg 工具。
如果遇到其他依赖问题,可按照类似思路查找缺失的依赖并补充下载。