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/cu121
echo "所有包已下载到 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 torchaudio
echo "所有包安装完成(已处理依赖冲突)"
运行安装脚本:
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 工具。
如果遇到其他依赖问题,可按照类似思路查找缺失的依赖并补充下载。