​为 Python 的使用创建虚拟环境,解决复杂的包管理问题

树莓派的官方系统 Raspberry Pi OS 预装了 Python 3。当你通过 pip 或者 apt 安装 Python 库时可能会给你的操作系统带来混乱问题。在 Linux 上,你可以通过两种方式安装 Python 依赖:

1、使用 apt 安装预配置的系统包
2、在虚拟环境中使用 Python 的依赖管理器 pip 安装库

可以在 Thonny 内部创建虚拟环境,也可以通过命令行创建虚拟环境。

使用 apt 安装 Python 包

通过 apt 安装的包是专门为 Raspberry Pi OS 打包的。这些包通常已经过预编译,因此安装速度更快。由于 apt 管理所有包的依赖项,因此使用此方法安装包括运行该包所需的所有子依赖项。如果你卸载包,apt 还可以确保你不会破坏其他包。

例如,要安装支持 Raspberry Pi Build HAT 的 Python 3 库,请运行以下命令:

$ sudo apt install python3-build-hat

要查找通过 apt 分发的 Python 包,请使用 apt search。在大多数情况下,Python 包使用前缀 python- 或 python3- :例如,你可以在 python3-numpy 下找到 numpy 包。

使用 pip 安装 Python 库

在 Raspberry Pi OS 的旧版本中,你可以使用 pip 直接将库安装到系统版本的 Python 中。但从 Raspberry Pi OS Bookworm 版本开始,用户无法直接将库安装到系统版本的 Python 中。

在 Raspberry Pi OS Bookworm 中尝试使用 pip 安装包会导致错误。

相反,应将库安装到虚拟环境(venv)中。若要在系统级别为所有用户安装库,请使用 apt 进行安装。

尝试在系统范围内安装 Python 包会输出类似于以下的错误:

$ pip install buildhat
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.

长期以来,Python 用户一直需要处理像 apt 这样的操作系统包管理器和像 pip 这样的 Python 专用包管理工具之间的冲突。这些冲突包括 Python 级别的 API 不兼容性和文件所有权冲突。
从 Raspberry Pi OS Bookworm 版本开始,通过 pip 安装的包必须安装到 Python 虚拟环境(venv)中。虚拟环境是一个容器,你可以在其中安全地安装第三方模块,这样它们就不会干扰你的系统 Python。

在虚拟环境中使用 pip

要使用虚拟环境,请创建一个容器来存储环境。根据你想要如何使用Python,有几种方法可以做到这一点:

按项目环境

许多用户为每个 Python 项目创建单独的虚拟环境。将虚拟环境定位在每个项目的根文件夹中,通常使用一个共享的名称,如 env。从每个项目的根文件夹运行以下命令来创建虚拟环境配置文件夹:

$ python -m venv env

在开始处理项目之前,从项目的根目录运行以下命令以开始使用虚拟环境:

$ source env/bin/activate

然后你应该会看到一个类似于以下的提示符:

$ (.env) $

当你完成一个项目的工作后,从任何目录运行以下命令以退出虚拟环境:

$ deactivate

按用户环境

和按项目来创建虚拟环境不同,你可以为你的用户帐户创建一个单独的虚拟环境。在运行任何 Python 代码之前激活该虚拟环境。对于跨项目共享许多库的工作流,这种方法可能更方便。

在为整个用户帐户的多个项目创建虚拟环境时,请考虑将虚拟环境配置文件定位在你的主目录中。将你的配置文件存储在一个名称以句点开头的文件夹中,以便默认隐藏该文件夹,防止其使你的主文件夹杂乱无章。

在主目录中添加一个虚拟环境,以便在多个项目中使用并共享包。

使用以下命令在当前用户的主目录中的隐藏文件夹中创建一个虚拟环境:

$ python -m venv ~/.env

从任何目录运行以下命令以开始使用虚拟环境:

$ source ~/.env/bin/activate

然后你应该会看到一个类似于以下的提示符:

$ (.env) $

要退出虚拟环境,从任何目录运行以下命令:

$ deactivate

创建虚拟环境

运行以下命令以创建虚拟环境配置文件夹,将 替换为你想要为虚拟环境使用的名称(例如 env):

$ python -m venv <env-name>

进入虚拟环境
然后,在虚拟环境配置文件夹中执行 bin/activate 脚本来进入虚拟环境:

$ source <env-name>/bin/activate

然后你应该会看到一个类似于以下的提示符:

$ (<env-name>) $

()命令提示符前缀表示当前终端会话处于名为 的虚拟环境中。
要检查你是否处于虚拟环境中,请使用pip list查看已安装包的列表:

$ (<env-name>) $ pip listPackage    Version
---------- -------
pip 23.0.1
setuptools 66.1.1

列表应该比你的系统 Python 中安装的包列表短得多。现在你可以安全地使用 pip 安装包。在虚拟环境中,你使用pip安装的任何包都只安装到该虚拟环境中。在虚拟环境中,python 或 python3 命令会自动使用虚拟环境的 Python 版本和已安装包,而不是系统 Python。

小贴士:在文件夹名称前传递 –system-site-packages 标志,以将当前系统 Python 安装中已安装的所有包预加载到虚拟环境中。

退出虚拟环境

要退出虚拟环境,运行以下命令:

$ (<env-name>) $ deactivate

使用 Thonny 编辑器

我们建议在树莓派上使用 Thonny 编辑 Python 代码。

默认情况下,Thonny 使用系统 Python。但是,你可以通过点击 Thonny 窗口右下角的解释器菜单来切换到使用 Python 虚拟环境。选择一个已配置的环境或使用“配置解释器”配置一个新的虚拟环境。



坐沙发

发表评论

你的邮件地址不会公开


*