ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

树莓派软件安装全攻略:从换源到源码编译的终极解决方案

树莓派软件安装全攻略:从换源到源码编译的终极解决方案 1. 项目概述为什么树莓派下载软件包是个技术活玩树莓派的朋友估计没人能绕过“下载安装软件包”这个坎。表面上看不就是敲个sudo apt-get install或者pip install吗但实际操作起来尤其是在国内网络环境下新手遇到的报错信息能让人瞬间懵圈。从“无法解析主机”到“连接超时”再到各种依赖冲突和版本不匹配每一个错误都可能让你在搜索引擎和论坛里泡上半天。我自己在带新手玩树莓派时发现90%的初期问题都卡在软件安装上。很多人拿到树莓派兴致勃勃地想装个桌面环境、部署个Web服务器或者跑个Python脚本结果第一步更新系统就卡住了热情直接被浇灭。这背后的核心原因是树莓派默认的软件源服务器位于海外对于国内用户来说访问速度慢、不稳定是常态。而Python的pip包管理器同样面临镜像源的问题。所以这篇内容的目的非常“暴力”直接我要用最详细、最不留死角的方式把在树莓派上下载和安装软件包的所有路径、所有方法、所有可能踩的坑一次性给你讲透。从最基础的apt-get换源到pip镜像配置再到离线安装、源码编译这种“终极手段”我都会覆盖。目标只有一个让你无论遇到什么网络环境都能成功把想要的软件装到树莓派上。这不是一篇轻飘飘的教程而是一份基于大量实战踩坑总结出来的“生存指南”。2. 核心思路构建多层次软件获取体系面对树莓派软件安装的种种困境我们不能只依赖一种方法。我的核心思路是建立一个从“常规”到“非常规”的、层层递进的软件获取体系。就像打仗要有预备队一样装软件也得有B计划、C计划。2.1 第一层优化官方渠道换源这是最推荐、也是最应该首先尝试的方法。无论是Debian/Ubuntu系的apt还是Python的pip其本质都是从远程仓库下载。将仓库地址从国外的官方源替换为国内的镜像源能带来质的飞跃。国内高校和机构提供的镜像源如清华、中科大、阿里云同步速度很快能解决99%的下载慢和超时问题。这是成本最低、收益最高的解决方案。2.2 第二层利用预编译二进制包当换源后依然找不到某个软件包或者需要特定版本时可以寻找第三方提供的预编译好的.deb用于apt或.whl用于pip文件。很多软件的GitHub Release页面会提供针对ARM架构树莓派是ARM CPU的编译好的包。直接下载这些包到本地进行安装可以绕过网络下载和编译过程非常快捷。2.3 第三层源码编译安装这是最后的“大招”也是最“暴力”的方法。当以上所有方法都失效时我们可以直接获取软件的源代码在树莓派本地进行编译和安装。这种方法最通用几乎可以安装任何开源软件但耗时最长对系统环境要求最高且容易遇到依赖库缺失的问题。它考验的是你解决依赖和排查编译错误的能力。2.4 贯穿始终的依赖管理思维无论用哪种方法都要时刻牢记“依赖”二字。Linux下的软件像积木一个软件往往建立在其他多个软件库依赖之上。apt之所以强大就是因为它能自动处理依赖关系。而当我们采用离线或源码安装时就必须手动解决这些依赖这是所有难点中的难点。后文我会详细讲如何系统地处理依赖问题。3. 基础环境准备与系统源更换在开始任何安装操作之前确保你的树莓派系统是最新的并且已经切换到国内的软件源这是保证后续所有操作顺畅的基础。3.1 系统更新与备份在更换源之前我们先做一次更新并使用默认源确保基础系统组件是最新的。同时养成修改重要配置文件前先备份的好习惯。# 1. 备份当前的源列表文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak # 2. 使用当前源更新软件列表并升级现有软件这步可能慢但很重要 sudo apt update sudo apt upgrade -y注意第一次apt update可能会很慢甚至失败如果卡住或报错不要慌直接进行下一步换源操作即可。备份文件.bak就是我们的“后悔药”如果换源后出现问题可以执行sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list来恢复。3.2 更换APT软件源以清华源和Ubuntu 22.04为例树莓派官方系统Raspbian/Raspberry Pi OS和Ubuntu for Raspberry Pi的源文件位置和内容略有不同。你需要先确定你的系统版本。# 查看系统版本信息 cat /etc/os-release如果是 Raspberry Pi OS (基于Debian) 主要修改/etc/apt/sources.list和/etc/apt/sources.list.d/raspi.list。如果是 Ubuntu Server/Desktop 主要修改/etc/apt/sources.list。下面以Raspberry Pi OS (Bookworm版本)更换清华源为例# 使用sed命令一键替换将官方源地址替换为清华镜像站地址 sudo sed -i s|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo sed -i s|security.debian.org|mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list # 同样替换树莓派专用软件源 sudo sed -i s|archive.raspberrypi.org|mirrors.tuna.tsinghua.edu.cn/raspberrypi|g /etc/apt/sources.list.d/raspi.list手动编辑方法备用 如果你不熟悉sed或者想更精确地控制可以用nano编辑器手动修改。sudo nano /etc/apt/sources.list将文件里原有的deb.debian.org开头的行注释掉在行首加#并添加以下内容以Debian Bookworm为例deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware同理编辑/etc/apt/sources.list.d/raspi.list替换为deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bookworm main3.3 更换pip镜像源Python的包管理器pip默认使用PyPI官方源同样需要更换。分为全局配置和临时使用两种方式。全局配置推荐# 创建pip配置目录 mkdir -p ~/.pip # 编辑pip配置文件 nano ~/.pip/pip.conf在文件中写入以下内容以清华源为例[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn这样之后所有的pip install命令都会默认使用清华源。临时使用 在安装命令后加-i参数指定镜像源。pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple3.4 验证换源是否成功完成上述操作后执行更新感受速度的飞跃。sudo apt update sudo apt upgrade -y如果列表刷新速度很快没有出现“连接超时”等错误说明换源成功。此时再尝试安装一些常用软件比如htop速度应该非常理想。sudo apt install htop -y4. APT包管理器的深度使用与问题排查换源是解决了大部分问题但APT的使用技巧远不止install一个命令。掌握这些技巧能让你在软件管理上更加得心应手。4.1 APT常用命令详解sudo apt update刷新软件包索引。这步只更新本地软件包列表从源服务器下载 Packages.gz 等文件并不安装或升级任何软件。每次换源或长时间未更新后必须先执行此命令。sudo apt upgrade升级所有可升级的软件包。它会根据update得到的列表将已安装的软件升级到源里提供的最新版本。-y参数表示自动回答“yes”用于脚本中。sudo apt full-upgrade智能升级会处理因升级而可能产生的依赖冲突有时需要移除一些旧包。比upgrade更激进一些。sudo apt install package_name安装指定软件包并自动安装其依赖。sudo apt remove package_name移除软件包但保留配置文件。sudo apt purge package_name彻底移除软件包同时删除配置文件。想干净卸载某个软件时用这个。sudo apt autoremove自动删除那些为了满足其他软件依赖而自动安装但现在不再需要的软件包。定期运行可以清理空间。sudo apt search keyword在所有软件源中搜索包含关键词的软件包描述。sudo apt show package_name显示某个软件包的详细信息包括版本、依赖、描述等。apt list --installed列出所有已安装的软件包。4.2 典型APT错误与暴力解决即使换了源你也可能遇到以下问题问题1E: Unable to locate package原因软件包名称拼写错误或者该软件不在你当前系统的软件源中可能属于其他分支如testing。解决用apt search确认正确的包名。检查/etc/apt/sources.list是否包含了正确的发行版代号如bookworm,jammy。对于树莓派专用软件确保raspi.list源已正确配置。问题2E: Failed to fetch ... 404 Not Found原因软件源中该版本的软件包路径确实不存在了。常见于系统版本较老而镜像站可能清理了过旧的仓库。暴力解决再次检查系统版本和源地址是否匹配。一个Ubuntu 20.04的系统用了22.04的源就会出这个错。考虑升级系统到更新的稳定版本注意备份数据。终极方案去软件的官网或GitHub寻找提供.deb安装包的其他安装方式见第5章。问题3E: Unmet dependencies.原因要安装的软件包依赖的其他包无法被满足可能是版本冲突也可能是依赖包缺失。暴力解决流程# 1. 首先尝试修复安装 sudo apt --fix-broken install # 2. 更新并尝试完整升级 sudo apt update sudo apt full-upgrade -y # 3. 清除已损坏的包缓存 sudo apt clean sudo apt autoclean # 4. 如果还不行尝试安装缺失的特定依赖从错误信息中找 # 例如错误提示缺 libxxx1就尝试sudo apt install libxxx1 # 5. 核武器如果确定要安装的软件不重要或者冲突的软件可移除可以尝试慎用 sudo apt install package_name --fix-missing心得依赖问题最棘手。如果上述方法无效往往意味着你的软件源状态混乱。这时考虑回到第3步用备份文件恢复源列表或者寻找该软件的第三方.deb包可能打包了所有依赖。5. 离线安装与第三方DEB包攻略当网络彻底断绝或者官方源里根本没有想要的软件时我们就需要“自力更生”了。离线安装的核心在于获取软件包文件.deb和它的所有依赖。5.1 从其他设备下载DEB包如果你有一台能正常上网的电脑甚至是另一台树莓派可以用它来下载所需软件包。方法A使用apt download在能上网的、相同系统版本的Linux机器上# 下载软件包及其所有依赖但不安装 apt download package-name # 或者使用 apt-get apt-get download package-name这会将一个.deb文件下载到当前目录。但它只下载指定的包不包含依赖。要下载依赖需要更复杂的工具。方法B使用apt-offline强烈推荐apt-offline是专门为离线安装设计的工具。在离线树莓派上生成需求签名文件sudo apt-offline set apt-offline.sig --install-packages package-name将生成的apt-offline.sig文件拷贝到在线电脑上。在在线电脑上下载所需的所有包apt-offline get apt-offline.sig --bundle apt-offline-bundle.zip将apt-offline-bundle.zip拷贝回树莓派并进行安装sudo apt-offline install apt-offline-bundle.zip这个方法能完美解决依赖问题是离线安装的“瑞士军刀”。5.2 安装本地DEB包获取到.deb文件后在树莓派上安装sudo dpkg -i /path/to/package.deb如果安装失败并提示依赖问题可以运行以下命令尝试自动安装缺失的依赖sudo apt --fix-broken install这条命令会分析当前dpkg的状态并尝试从配置好的软件源中下载并安装缺失的依赖。前提是你的树莓派软件源是通的。如果完全离线你就必须手动下载所有缺失依赖的.deb包并按照依赖顺序逐个安装这个过程非常繁琐。5.3 寻找第三方DEB包的网站除了从官方镜像站下载还有很多网站提供丰富的.deb软件包Ubuntu/Debian 官方软件包搜索网站Ubuntu: https://packages.ubuntu.comDebian: https://packages.debian.org 在这里你可以搜索软件包并直接下载对应架构armhf, arm64的.deb文件。注意选择与你的系统版本匹配的发行版。软件官方GitHub Release页面 许多开源项目会在发布时提供编译好的.deb包。例如安装Docker时我们经常直接从 Docker 官方提供的脚本或仓库安装其实他们也在 GitHub Release 上提供了.deb包。第三方仓库PPA 对于Ubuntu系统可以添加个人软件包存档PPA。但树莓派原生系统Raspberry Pi OS基于Debian不直接支持PPA。不过你可以尝试将PPA的源地址转换为Debian可用的格式或者直接下载PPA中提供的.deb文件。添加第三方源需谨慎可能带来系统不稳定。实操心得对于树莓派优先选择标注为armhf(32位系统) 或arm64(64位系统) 的包。最稳妥的方式是在另一台相同系统版本的树莓派能上网上用apt download或apt-offline打好包再拿到离线环境安装。这是100%兼容的方案。6. PIP包管理的进阶技巧与镜像优化Python生态是树莓派项目的重要组成部分pip的问题同样不容小觑。6.1 PIP安装的常见错误与解决错误pip: command not found原因Python或pip没有安装。解决# 对于Python 3 sudo apt install python3-pip -y # 安装后通常使用 pip3 命令。可以创建软链接让 pip 指向 pip3 sudo ln -s /usr/bin/pip3 /usr/local/bin/pip错误Could not find a version that satisfies the requirement或No matching distribution found原因PyPI镜像源中没有找到对应平台尤其是ARM架构的预编译轮子wheel。很多纯Python包没问题但依赖C扩展的包如numpy, pandas, opencv-python可能没有官方ARM轮子。暴力解决换用更全的源尝试阿里云、豆瓣等镜像。强制源码编译使用pip install package --no-binary :all:。这会强制从源码编译非常耗时且要求系统具备编译环境gcc,python3-dev等。sudo apt install build-essential python3-dev -y # 安装编译环境 pip install numpy --no-binary :all: -i https://pypi.tuna.tsinghua.edu.cn/simple寻找第三方预编译轮子一些社区项目为树莓派ARM架构预编译了常用的科学计算包。例如piwheels就是一个专门为树莓派准备的pip镜像它包含了大量预编译的ARM轮子。将其设为优先源可以极大加速安装。6.2 配置piwheels镜像源piwheels是树莓派基金会的官方合作项目必须用起来。编辑pip配置让它在找不到包时回退到piwheels。nano ~/.pip/pip.conf将内容修改或合并为[global] extra-index-url https://www.piwheels.org/simple index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn www.piwheels.org这样配置后pip会先查询清华源如果找不到合适的包特别是二进制轮子就会去piwheels查找通常这里都有为ARM优化过的预编译包安装速度极快。6.3 PIP离线安装利用requirements.txt对于Python项目通常用requirements.txt管理依赖。离线安装同样有办法。在在线环境打包所有依赖# 生成 requirements.txt pip freeze requirements.txt # 下载所有依赖包到本地目录如 ./packages pip download -r requirements.txt -d ./packages将requirements.txt和./packages文件夹拷贝到离线树莓派。在离线树莓派上从本地目录安装pip install --no-index --find-links./packages -r requirements.txt参数--no-index告诉pip不要查询PyPI--find-links指定本地包目录。6.4 创建Python虚拟环境强烈建议为每个项目创建独立的虚拟环境避免包版本冲突。# 安装虚拟环境工具 sudo apt install python3-venv -y # 为项目创建虚拟环境 python3 -m venv myproject_env # 激活虚拟环境 source myproject_env/bin/activate # 激活后pip安装的包只会在这个环境内 # 退出虚拟环境 deactivate在虚拟环境中同样可以配置独立的pip.conf管理起来更清晰。7. 终极暴力方案从源码编译安装当所有预编译包的方法都失效时从源码编译是最后的希望。这个过程可以概括为获取源码 - 解决依赖 - 配置 - 编译 - 安装。7.1 通用编译环境搭建在开始编译任何软件之前必须安装基础的开发工具链和库。sudo apt update sudo apt install -y build-essential cmake git pkg-config # 对于Python扩展还需要 sudo apt install -y python3-dev # 对于需要图形界面的软件可能需要 sudo apt install -y libgtk-3-dev libcanberra-gtk3-module7.2 经典编译安装流程以安装FFmpeg为例FFmpeg是一个强大的多媒体处理工具官方源版本可能较旧我们从源码编译最新版。安装编译依赖 FFmpeg依赖很多编解码库。我们先安装一些主要的。sudo apt install -y libx264-dev libx265-dev libvpx-dev libmp3lame-dev libopus-dev libfdk-aac-dev获取源码git clone https://github.com/FFmpeg/FFmpeg.git cd FFmpeg # 切换到稳定分支例如 n6.1 git checkout n6.1配置编译选项configure脚本用于检测系统环境并生成Makefile。这是最关键的一步选项决定了编译哪些功能。./configure --prefix/usr/local \ --enable-gpl \ --enable-libx264 \ --enable-libx265 \ --enable-libvpx \ --enable-libmp3lame \ --enable-libopus \ --enable-libfdk-aac \ --enable-nonfree--prefix/usr/local指定安装目录通常/usr/local是用户安装软件的标准位置。--enable-*启用我们之前安装的依赖库支持。运行后仔细查看输出确认需要的库都被检测到显示为yes没有报错。编译 使用make命令开始编译-j4表示使用4个线程并行编译以加快速度树莓派4B可用4核。make -j4这个过程会非常漫长可能持续数十分钟到几小时取决于软件规模和树莓派性能。期间CPU会满载。安装 编译成功后安装到系统。sudo make install安装后通常需要刷新动态链接库缓存。sudo ldconfig验证ffmpeg -version如果成功显示版本信息并且configuration一行中包含你启用的库如--enable-libx264则大功告成。7.3 源码编译的“坑”与应对坑1configure: error: Package requirements (xxx) were not met原因缺少某个开发库文件通常是libxxx-dev。解决根据错误提示安装对应的-dev包。例如提示缺libssl就安装libssl-dev。这是一个反复试错的过程。坑2make编译过程中报错提示某个头文件找不到或函数未定义原因依赖库版本不匹配或者头文件路径不对。解决检查是否安装了正确版本的-dev包。有时需要手动指定库路径。在./configure时可以通过CFLAGS和LDFLAGS环境变量指定。CFLAGS-I/usr/local/include LDFLAGS-L/usr/local/lib ./configure ...坑3编译成功make install也成功了但运行命令提示command not found原因安装路径--prefix不在系统的PATH环境变量中。解决如果安装到/usr/local通常已经在PATH中。如果安装到自定义目录如/opt/ffmpeg则需要将其bin目录加入PATH。echo export PATH/opt/ffmpeg/bin:$PATH ~/.bashrc source ~/.bashrc运行sudo ldconfig刷新库缓存。终极心得源码编译是最后的手段耗时耗力。在开始前务必在项目的官方文档通常是README.md或INSTALL文件中查找针对 Linux 或 ARM 平台的编译说明。优先考虑使用checkinstall工具sudo apt install checkinstall来代替make install它可以将编译好的程序打包成一个.deb文件方便以后管理和卸载。8. 特殊软件包与硬件的安装实例树莓派不仅仅是一台小电脑其GPIO引脚和摄像头等硬件接口才是其灵魂所在。安装驱动和库来操作这些硬件是树莓派项目的特色。8.1 树莓派摄像头驱动与软件包以经典的OV5647摄像头模块为例。启用摄像头接口 首先需要确保在树莓派配置中启用了摄像头。sudo raspi-config依次选择Interface Options-Legacy Camera(或Camera取决于系统版本) -Yes-Finish- 重启。安装系统摄像头支持 对于Raspberry Pi OS摄像头驱动和基础软件通常已集成。但为了使用更丰富的功能可以安装sudo apt install -y libraspberrypi-bin raspistill raspividraspistill命令行拍照工具。raspivid命令行录像工具。安装Python摄像头库 如果你想用Python控制摄像头picamera2是当前官方推荐的新库替代旧的picamera。sudo apt install -y python3-picamera2 python3-libcamera安装后一个简单的测试脚本test_camera.pyfrom picamera2 import Picamera2 import time picam2 Picamera2() picam2.start() time.sleep(2) # 让摄像头稳定 picam2.capture_file(test.jpg) picam2.stop() print(Photo captured!)运行python3 test_camera.py如果当前目录下生成test.jpg则说明摄像头工作正常。8.2 GPIO控制库安装Python中最常用的GPIO库是RPi.GPIO适用于旧项目和gpiozero官方推荐更简单。安装gpiozero 它通常已预装。如果没有可以通过apt安装因为它可能依赖一些系统服务。sudo apt install -y python3-gpiozero一个让LED闪烁的例子假设LED正极接GPIO17负极接地from gpiozero import LED from time import sleep led LED(17) while True: led.on() sleep(1) led.off() sleep(1)安装RPi.GPIO 对于需要这个库的旧脚本用pip安装即可。由于是纯PythonC扩展换用piwheels源后安装很快。pip install RPi.GPIO8.3 安装特定版本软件如旧版Python库有时项目依赖特定版本的库不兼容新版。pip可以指定版本安装。# 安装指定版本 pip install opencv-python4.5.3.56 # 安装不低于某个版本 pip install numpy1.19.0 # 安装版本范围 pip install requests2.20, 3.0如果从pip源找不到指定版本可以去PyPI官网https://pypi.org搜索该包在“Release history”里找到对应版本的下载链接用pip install 直接下载链接的方式安装。9. 系统级维护与空间清理树莓派的存储空间通常有限SD卡长期安装卸载软件会产生大量缓存和残留文件需要定期清理。9.1 APT缓存清理apt下载的.deb包会缓存在/var/cache/apt/archives/目录下。# 查看缓存占用空间 sudo du -sh /var/cache/apt/archives # 清理已过时的软件包缓存不会删除当前安装版本所需的包 sudo apt autoclean # 清理所有已下载的软件包缓存更彻底下次安装需重新下载 sudo apt clean建议定期运行sudo apt autoclean。9.2 移除无用依赖和包# 自动移除不再需要的依赖包 sudo apt autoremove -y # 谨慎使用移除已安装但未被依赖的包可能会误删你手动安装的工具 # sudo apt autoremove --purge9.3 查找大文件与目录当空间告急时需要找出占用空间大的元凶。# 查看根目录下各文件夹大小 sudo du -sh /* 2/dev/null | sort -hr # 查看当前目录下各子目录大小 du -sh ./* | sort -hr # 查找大于100M的文件 find / -type f -size 100M 2/dev/null | xargs ls -lh常见的清理目标/var/log日志文件可以使用logrotate管理或手动清理旧日志。~/.cache用户缓存目录。旧的Linux内核镜像sudo apt purge linux-image-*注意保留当前正在使用的内核。9.4 使用工具可视化查看安装ncdu工具可以交互式地查看目录空间占用。sudo apt install ncdu -y ncdu /使用方向键导航d键删除选中的文件或目录需谨慎。软件包管理是树莓派使用的基石从顺畅的换源开始到熟练使用apt和pip再到掌握离线安装和源码编译的“暴力”方法构成了应对各种环境的能力阶梯。最重要的经验是第一永远先备份再修改关键配置第二遇到问题优先看错误信息它通常指明了方向第三善用社区和搜索引擎你遇到的坑大概率别人已经踩过并提供了解决方案。把这份指南里的命令和思路变成你的肌肉记忆你的树莓派之旅会顺利很多。
返回列表