树莓派OS "Bookworm"版本,用于树莓派5上,更改了安装Python模块的方法。
关键要点:
1)树莓派OS Bookworm需要在一个虚拟环境中安装Python包来防止与Python的系统版本发生冲突。
2)你可以使用apt包管理器来搜索和安装Python包,但如果这个包获取不到或者你需要一个更新版本,你需要在一个虚拟环境中使用pip工具。
3)在虚拟环境中任何更改或安装不会影响系统版本Python。
在Raspberry Pi OS Bookworm中使用"pip"工具进行安装Python包吗?你需要采取一些额外步骤,包括创建一个Python虚拟环境。这是如何做这件事。
在树莓派OS Bookworm中做了什么更改
由于树莓派5不兼容更早版本的树莓派OS,你将需要在它上安装新的"Bookworm"。当从一个较早型号切换到树莓派5时,这是需要考虑事情中的一件。
在先前基于Debain的树莓派OS操作系统版本(Buster和更早)中,使用pip包管理工具直接系统范围安装Python库是可能的。但新的树莓派OS Bookworm中不再是这种情况。
如树莓派文档解释,这个问题是使用诸如pip的Python专用工具会产生与apt OS包管理器冲突。因而,从Bookworm之后,在使用pip时,包必须被安装到一个封装的Python虚拟环境中,这个环境确保它们步干扰系统版本的Python。
如果你尝试在系统中任何其它地方使用命令pip install[包名],你将接收一个以这段文本开始的错误:
user@raspberrypi:/usr/local $ sudo pip install pyepics
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
For more information visit http://rptl.io/venv
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
如何用apt搜索Python包
要检查的第一件事是你需要的Python包是否可用于使用系统范围apt包管理器来安装。你需要使用apt search命令在官方仓库中搜索包。例如:
user@raspberrypi:/usr/local $ sudo apt search numpy | grep numpy
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libboost-numpy-dev/stable 1.74.0.3 arm64
libboost-numpy1.74-dev/stable 1.74.0+ds1-21 arm64
libboost-numpy1.74.0/stable 1.74.0+ds1-21 arm64
libboost-numpy1.81-dev/stable 1.81.0-5+deb12u1 arm64
libboost-numpy1.81.0/stable 1.81.0-5+deb12u1 arm64
numpy-stl/stable,stable 2.9.0-2 all
annotated gene by sample numpy matrix
Gnuplot-based plotter for numpy
python3-msgpack-numpy/stable,stable 0.4.8-1 all
serialize numpy arrays using msgpack
python3-numpy/stable,now 1:1.24.2-1 arm64 [已安装]
python3-numpy-groupies/stable,stable 0.9.20-1 all
python3-numpydoc/stable,stable 1.5.0-1 all
python3-numpysane/stable,stable 0.36-1 all
more-reasonable core functionality for numpy
Library for computation of physical quantities with units, based on numpy
S-expressions for numpy - Python 3 version
Python package for handling numpy arrays with units
注意:包名,在这个例子中python3-numpy(用于Python版本3),并且接着用apt安装它(以sudo为前缀,用于安装时所需的root权限)。
user@raspberrypi:/usr/local $ sudo apt install python3-numpy
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
python3-numpy 已经是最新版 (1:1.24.2-1)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
如果使用apt包管理器,你需要的Python包获取不到,或者你需要一个它的更新版本,你需要在一个Python虚拟环境中使用Python专用的pip工具来安装它。
如何创建一个Python虚拟环境
要在树莓派OS Bookworm中,用pip工具安装一个python包,你首先需要用venv创建一个虚拟Python环境。我们称我们的"first-venv-project",但你可以使用你想要的任何名称:
user@raspberrypi:~ $ python -m venv first-venv-project
取决于你正在使用的树莓派型号,它将需要一小会来完成。你接着将需要切换目录到这个新创建的环境文件夹,它包含了一个完整的Python发行包,并且激活它:
user@raspberrypi:~ $ ls
公共 视频 文档 音乐 Desktop
模板 图片 下载 Bookshelf first-venv-project
user@raspberrypi:~ $ cd first-venv-project/
user@raspberrypi:~/first-venv-project $ ls
bin include lib lib64 pyvenv.cfg
(first-venv-project) user@raspberrypi:~/first-venv-project $ $ source bin/activate
Python虚拟环境现在准备好使用了,并且将在系统提示前添加它的名称,在本例中,(first-venv-project)。这显示了你不再使用系统版本的Python,而是在你虚拟环境中的Python。因此,你对它做的任何更改活着的你安装了模块,不影响系统Python。
注意:你想要用在操作系统级别安装的当前所有Python模块的一个副本创建一个Python虚拟环境,你可以通过在命令中添加--system-site-packages来做这件事。例如:python -m venv --system-site-packages first-venv-project。
用Pip安装Python包
从激活的Python虚拟环境内,你可以使用pip命令安装你需要的任何包。例如,安装numpy, scipy和pyepics工具:
(first-venv-project) user@raspberrypi:~/first-venv-project $ pip install numpy
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting numpy
Downloading numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.2/14.2 MB 1.1 MB/s eta 0:00:00
Installing collected packages: numpy
Successfully installed numpy-1.26.3
(first-venv-project) user@raspberrypi:~/first-venv-project $ pip install scipy
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting scipy
Downloading scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (32.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 32.9/32.9 MB 954.3 kB/s eta 0:00:00
Requirement already satisfied: numpy<1.28.0,>=1.21.6 in ./lib/python3.11/site-packages (from scipy) (1.26.3)
Installing collected packages: scipy
Successfully installed scipy-1.11.4
(first-venv-project) user@raspberrypi:~/first-venv-project $ pip install pyepics
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pyepics
Downloading https://www.piwheels.org/simple/pyepics/pyepics-3.5.2-py3-none-any.whl (5.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 647.5 kB/s eta 0:00:00
Requirement already satisfied: setuptools in ./lib/python3.11/site-packages (from pyepics) (66.1.1)
Requirement already satisfied: numpy in ./lib/python3.11/site-packages (from pyepics) (1.26.3)
Collecting pyparsing
Downloading https://www.piwheels.org/simple/pyparsing/pyparsing-3.1.1-py3-none-any.whl (103 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 103.1/103.1 kB 191.2 kB/s eta 0:00:00
Installing collected packages: pyparsing, pyepics
Successfully installed pyepics-3.5.2 pyparsing-3.1.1
它将接着在你的Python虚拟环境中和它们所需要的任何以来包一起安装这些模块。注意:这些模块将只在这里可用而不是系统范围。
(first-venv-project) user@raspberrypi:~/first-venv-project $ python
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import epics
>>> epics.caget("Ortec974A:Scaler1.TP")
1000.0
>>> epics.caget("Ortec974A:Scaler1.TP1")
1.0
Python包不再冲突
当在树莓派Bookworm中使用pip工具安装python包时,需要额外的步骤,优势是它们仅在虚拟环境中活动,并且因而不干扰或破坏这个系统。