树莓派Python3.9环境搭建与pip国内镜像加速全攻略
1. 为什么要在树莓派上折腾Python 3.9?
如果你刚拿到树莓派,想用它来做点有趣的项目,比如搭建一个智能家居中枢、做一个天气数据采集站,或者跑一些机器学习的小模型,那你大概率绕不开Python。Python是树莓派生态里的“头号玩家”,官方系统Raspbian(现在叫Raspberry Pi OS)默认就带了Python。但问题来了,系统自带的Python版本往往比较老,可能是3.7或者3.8。而很多新的、好玩的Python库,比如一些最新的AI框架或者工具包,它们对Python版本有要求,常常需要3.9甚至更高版本才能跑得顺畅。
所以,自己动手在树莓派上安装一个指定版本的Python,比如3.9,就成了很多开发者的“必修课”。这不仅仅是装个软件那么简单,它意味着你获得了对开发环境的完全控制权。你可以用上最新的语言特性,享受更好的性能优化,最关键的是,能避免因为版本不兼容而出现的各种稀奇古怪的报错。我自己就遇到过,想装一个库,结果提示需要Python 3.9+,而系统自带的是3.7,那种感觉就像被卡在了门外。
当然,直接在树莓派上安装Python 3.9,和我们平时在Windows或Mac上双击安装包完全不同。树莓派用的是ARM架构的处理器,很多预编译好的二进制包不一定直接可用。最通用、最可靠的方法,就是从源代码开始编译。听起来有点吓人?别担心,这个过程就像按照食谱做一道菜,步骤是固定的,只要跟着来,成功率非常高。而且,自己编译还有一个隐藏好处:你可以针对树莓派这块小小的板子进行特定的优化,让Python跑得更快一点,这在资源有限的设备上可是实实在在的提升。
2. 准备工作:给树莓派“热身”
在开始编译Python这座“大楼”之前,我们得先把“工地”准备好。所谓“热身”,就是确保你的树莓派系统是最新的,并且安装了所有必要的编译工具和依赖库。这一步千万不能省,否则编译过程中可能会因为缺少某个组件而失败,那时候再回头来找原因就麻烦了。
首先,打开你的树莓派终端(如果你用的是带桌面的版本,可以在菜单里找到终端;如果是无界面的Lite版,那启动后就在命令行下了)。我们要做的第一件事,是更新系统的软件包列表。这相当于去超市购物前,先看看最新的商品目录。
sudo apt update
输入这行命令,回车,然后输入你的密码(树莓派默认密码是raspberry,如果你改过就用改过的)。你会看到一串串的网址在滚动,这是在从软件源服务器获取最新的包信息。更新完成后,我们接着升级所有已安装的包到最新版本,这个命令是sudo apt upgrade -y。加上-y参数是为了让它自动确认,不用我们再手动输入“y”。不过,这一步根据网络速度和已安装包的数量,可能会花点时间,你可以先去喝杯茶。
接下来是关键:安装编译Python所必需的一系列开发工具和库文件。这些工具就像是建筑工人的各种器械——编译器、链接器、还有各种代码库的头文件。我们用一个命令把它们都装上:
sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev
这个命令看起来很长,别被吓到。我来简单拆解一下:
build-essential:这是核心编译工具套件,包含了gcc、g++、make等。zlib1g-dev、libbz2-dev:这些是压缩库的开发文件,Python的某些模块需要它们。libssl-dev、libffi-dev:用于支持加密和安全功能,比如通过pip安装一些需要安全连接的包。libsqlite3-dev:SQLite数据库的开发文件,Python内置的sqlite3模块依赖它。libreadline-dev、libncurses5-dev:这两个能让Python的交互式命令行(就是那个>>>提示符)更好用,支持历史命令、方向键移动等。
把这些都装上,就相当于备齐了所有建材和工具,接下来就可以安心地去“下载蓝图”了。
3. 下载与编译:从源码到可执行文件
“热身”完毕,现在正式开工。我们选择Python 3.9.10这个版本,它是一个比较稳定且功能完善的版本。首先,我们需要把Python的源代码“蓝图”下载到树莓派上。这里我们用wget这个命令行下载工具,直接从Python官方的FTP服务器获取。
wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz
这个文件大概20多MB,下载速度取决于你的网络。下载完成后,你会看到一个名为Python-3.9.10.tgz的压缩包。接下来,我们要把它解压开:
tar xvf Python-3.9.10.tgz
tar是解压命令,xvf参数表示解压(x)、显示详细文件列表(v)、从文件解压(f)。解压后会生成一个Python-3.9.10的文件夹,我们进入这个文件夹:
cd Python-3.9.10
现在,我们进入了源代码的“工地”内部。在开始“施工”(编译)前,我们需要运行一个配置脚本。这个脚本会检查你的系统环境,看看我们之前安装的那些“建材”和“工具”是否齐全,并根据检查结果生成一个适合你当前系统的“施工方案”(Makefile)。
./configure --enable-optimizations
这里加了一个重要的参数--enable-optimizations。这个参数会让编译过程开启一些优化选项,最终生成的Python解释器性能会更好。对于树莓派这种性能不算很强的设备,开启优化是很有意义的。配置过程会输出很多检查信息,只要最后没有报错(error)就行。
配置完成后,最耗时但也最核心的一步来了:编译。简单说,就是把人类可读的源代码,转换成树莓派CPU能直接执行的机器码。我们使用make命令,并加上-j4参数。
make -j4
-j4表示使用4个并行任务来编译。树莓派4B有四个CPU核心,这个参数能让它“四核全开”,充分利用硬件资源,显著缩短编译时间。即便如此,在树莓派4B上,这个过程也可能需要30分钟到1个小时,具体取决于你的SD卡速度。如果是更早型号的树莓派,时间会更长。这是整个过程中最考验耐心的时候,你可以把它放在一边,让它自己运行。
编译成功后,我们就可以“安装”了。这相当于把编译好的“成品”搬运到系统的标准目录下,让所有用户都能方便地使用。
sudo make install
这个命令会把Python 3.9的可执行文件安装到/usr/local/bin/目录下,相关的库文件安装到/usr/local/lib/。安装完成后,理论上你输入/usr/local/bin/python3.9就可以启动这个新版本的Python了。但为了使用方便,我们还需要进行下一步操作。
4. 软链接管理:让系统“认识”新Python
安装完成后,你可能会发现,直接在终端里输入python或者python3,启动的仍然是系统自带的旧版本。这是因为系统通过一种叫做“软链接”的机制来定位命令。软链接你可以理解为一个快捷方式,它指向真正的可执行文件。
我们先看看系统里python这个命令目前指向哪里:
ls /usr/bin/python -l
输出可能类似于/usr/bin/python -> python2.7,这说明python命令链接到了Python 2.7。而python3命令可能链接到python3.7。我们的目标,是让python这个最常用的命令,指向我们刚装好的Python 3.9。
首先,安全起见,我们先把旧的软链接删除。注意,这只是删除一个“快捷方式”,并不会删除系统自带的Python 2.7或3.7,它们仍然存在于系统中。
sudo rm -f /usr/bin/python
然后,我们创建一个新的软链接:
sudo ln -s /usr/local/bin/python3.9 /usr/bin/python
这个命令的意思是:在/usr/bin/目录下,创建一个名为python的软链接(-s),它指向/usr/local/bin/python3.9这个真实的文件。
现在,我们来验收成果:
python --version
如果终端显示Python 3.9.10,那么恭喜你,大功告成!你的树莓派现在默认使用的就是Python 3.9了。这里有个小提示:有些系统脚本可能依赖python命令指向Python 2,修改后可能导致它们出错。不过,现在绝大多数新项目和环境都转向Python 3了,这个问题不常见。如果你真的遇到,可以尝试用python2或python3.7这样的具体命令来调用旧版本。
5. 认识pip:Python的“软件管家”
Python环境搭好了,就像新房子盖好了。但一个空房子没法住人,我们需要往里面添置家具——也就是各种功能强大的第三方库,比如用来做科学计算的NumPy,用来做网页的Flask或Django。这时候,pip就该登场了。
你可以把pip想象成Python世界的“软件管家”或者“应用商店”。它的全称是“Pip Installs Packages”。你只需要告诉它你想要什么库(包),它就会自动去互联网上的仓库(默认是PyPI, Python Package Index)找到这个库,连同它依赖的其他库,一起下载并安装到你的Python环境里,非常方便。
在树莓派上,我们通常需要安装两个pip:一个是给Python 2用的python-pip(虽然现在用得少了),另一个是给Python 3用的python3-pip。由于我们刚刚安装了Python 3.9,它自带了一个pip3.9,但为了命令统一和方便,我们还是通过系统包管理器安装一下:
sudo apt install -y python3-pip
安装完成后,可以检查一下版本:
pip3 --version
你会看到类似pip 21.x.x from /usr/local/lib/python3.9/site-packages/pip (python 3.9)的输出,这说明pip已经和我们的Python 3.9关联好了。现在,你就可以用pip3 install 包名来安装任何你想要的库了。
但是,直接使用默认的PyPI源,在国内可能会遇到一个非常头疼的问题:速度慢,甚至完全连不上。这是因为PyPI的主服务器在国外,网络延迟高,还不稳定。下载一个小库可能都要等半天,更别说像NumPy、TensorFlow这种动辄几百MB的大库了,经常会下载到一半就超时失败。这就需要我们进行下一步关键的优化:给pip换一个“快递站”。
6. 国内镜像源原理与选择
为什么换一个“快递站”就能变快?这就要说到“镜像源”的概念了。PyPI官方仓库在海外,就像是一个总仓库。国内的一些高校和科技公司,会定期、完整地把这个总仓库里的所有软件包“同步”(也就是镜像)到自己在国内的服务器上,建立一个一模一样的副本。这个副本就是“国内镜像源”。
当我们将pip的下载地址配置为国内的镜像源后,pip install命令就不再是千里迢迢去海外总仓取货,而是去附近的国内镜像站取货。物理距离近了,网络链路好了,下载速度自然会有几十倍甚至上百倍的提升,而且稳定性也大大增强。
国内有几个非常知名且稳定的镜像源,它们都是免费、公开服务的。这里我列出一个简单的对比,你可以根据自己的情况选择:
| 镜像源名称 | 网址 | 特点 |
|---|---|---|
| 清华大学镜像站 | https://pypi.tuna.tsinghua.edu.cn/simple |
国内最老牌、最稳定的镜像之一,同步频率高,速度非常快。 |
| 阿里云镜像站 | https://mirrors.aliyun.com/pypi/simple |
阿里云维护,速度和稳定性极佳,尤其适合阿里云ECS用户。 |
| 华为云镜像站 | https://repo.huaweicloud.com/repository/pypi/simple |
华为云维护,网络质量好,也是一个可靠的选择。 |
| 豆瓣镜像站 | http://pypi.douban.com/simple |
老牌镜像,但注意是http而非https。 |
| 腾讯云镜像站 | http://mirrors.cloud.tencent.com/pypi/simple |
腾讯云维护,适合腾讯云用户。 |
我个人最常用的是清华大学源和阿里云源,它们的速度和稳定性经受住了长时间的考验。你可以任选其中一个来配置。接下来,我就以清华大学源为例,详细说明两种配置方法。
7. 配置pip镜像源(两种方法)
配置镜像源,本质上是告诉pip:“以后别去默认地方了,去我指定的这个地址下载”。有两种常用的配置方法:命令行临时使用和修改配置文件永久生效。
方法一:命令行临时使用(适合一次性安装) 如果你只是临时安装某个库,想体验一下飞快的速度,可以在pip install命令后面直接加上-i参数来指定镜像源。
pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
这样,pip在安装numpy时就会使用清华大学的镜像。这种方法的好处是灵活,不影响全局配置。但缺点是每次安装都要敲一长串地址,比较麻烦。
方法二:修改配置文件(推荐,一劳永逸) 我们更推荐修改pip的全局配置文件,这样之后所有的pip install命令都会自动使用镜像源,省心省力。
首先,我们需要创建pip的配置目录和文件。在用户的家目录下(~就代表家目录),创建一个名为.pip的隐藏文件夹,并在里面创建一个pip.conf文件。
mkdir -p ~/.pip
然后,我们用文本编辑器来创建并编辑这个配置文件。在树莓派上,最方便的命令行编辑器是nano,它对新手非常友好。
nano ~/.pip/pip.conf
这个命令会打开nano编辑器,并创建一个新的pip.conf文件(如果不存在的话)。现在,把下面这几行配置内容一字不差地粘贴进去:
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
我来解释一下每一行的作用:
[global]:这是一个节头,表示下面的配置是全局生效的。timeout = 6000:设置网络超时时间为6000秒(100分钟)。对于下载大文件(如TensorFlow)非常有用,避免因网络波动导致下载中断而被误认为超时失败。index-url = ...:这是最核心的配置,指定了pip下载包的索引地址,也就是我们选择的镜像源网址。trusted-host = ...:将镜像源的主机标记为“受信任的”。因为有些镜像源使用HTTPS证书可能有点小问题,加上这一行可以避免SSL证书验证错误。
粘贴完成后,按键盘上的Ctrl + O(这是保存文件的快捷键),然后按回车确认文件名。接着按Ctrl + X退出nano编辑器。
现在,配置就生效了!你可以尝试安装一个库来测试一下速度:
pip3 install --upgrade pip
这个命令是升级pip自身。你会看到下载速度相比之前有质的飞跃,通常能达到几MB/s,瞬间就完成了。至此,你的树莓派就拥有了一个高速的Python包下载通道。
8. 进阶技巧与避坑指南
环境搭好了,源也换好了,是不是就万事大吉了?在实际使用中,你可能还会遇到一些小问题。这里分享几个我踩过坑后总结的进阶技巧和注意事项。
1. 虚拟环境是必备技能 强烈建议你养成使用虚拟环境(virtual environment)的习惯。venv是Python 3.3以后内置的模块,不需要额外安装。它可以为每个项目创建一个独立的Python环境,每个环境里的包都是隔离的。这样做的好处是,不同项目依赖不同版本的库不会冲突。比如项目A需要Django 2.2,项目B需要Django 3.2,用虚拟环境就可以完美解决。
创建和使用虚拟环境非常简单:
# 在当前目录下创建一个名为‘myproject_env’的虚拟环境
python -m venv myproject_env
# 激活这个虚拟环境(在树莓派上)
source myproject_env/bin/activate
# 激活后,命令行提示符前会出现环境名,此时所有pip安装的包都会装在这个环境里
(myproject_env) pi@raspberrypi:~ $ pip install flask
# 退出虚拟环境
deactivate
2. 编译优化与时间权衡 前面我们编译时用了--enable-optimizations参数,这会让编译时间变长,但生成的解释器性能更好。如果你的树莓派型号较旧(比如Zero或3B),或者你急于使用,可以去掉这个参数,编译速度会快很多。但长期使用的话,我还是推荐开启优化。
3. 磁盘空间问题 从源码编译Python,以及后续安装很多科学计算包(如scipy, pandas),会占用大量磁盘空间。请确保你的树莓派SD卡有足够的剩余空间(建议至少4GB可用空间)。可以使用df -h命令查看磁盘使用情况。
4. 安装特定包失败怎么办? 有时候,即使换了国内源,安装某些复杂的包(尤其是包含C/C++扩展的,如mysqlclient, pillow)仍可能失败,提示缺少某些头文件(.h文件)。这通常是因为缺少对应的系统开发库。例如,安装pillow(一个图像处理库)可能需要先安装libjpeg-dev和zlib1g-dev。通用的解决思路是:仔细阅读错误信息,根据提示用sudo apt install安装缺失的-dev包。
5. 多版本Python共存 我们修改了/usr/bin/python的软链接,让它指向了Python 3.9。但系统里可能还存在python3.7这个命令。你可以通过具体的命令名来调用不同版本,例如python3.7 myscript.py。这实现了多版本共存,互不干扰。
最后,我想说的是,在树莓派上从源码搭建Python环境,虽然步骤稍多,但绝对是一次非常有价值的学习和实践。它能让你更深入地理解Linux软件管理、编译过程和环境配置。当你看到python --version输出3.9.10,当你用pip秒装一个曾经需要苦等的大库时,那种成就感就是对你耐心和动手能力的最好回报。这套环境将成为你在树莓派上进行各种创意项目最坚实的基础。
更多推荐
所有评论(0)