Debian12 Python安装第三方包的方法

随着 Debian 12的发布,更新了大量的软件,也删除了一些软件。在 Python 方面,版本号从 3.9 升级到了 3.11,以前通过 pip 安装第三方包的方式不再被推荐,默认是禁止直接通过 pip 安装第三方包。

直接使用 pip 安装三方包会出现以下报错信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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.

If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.

See /usr/share/doc/python3.11/README.venv for more information.

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.

通过提示可知,使用 pip 安装第三方包需要再虚拟环境使用,或者需要在命令后面加上--break-system-packages.

由此列出第三方库或者模块的安装方法

通过 apt 安装

直接通过apt install python3-xxx命令安装

1
2
#安装requests模块
apt install python3-requests

这个方式只支持打包到 Debian 软件源的包,源里没有的模块不能通过这种方式安装。

使用虚拟环境

官方提示虚拟环境可以使用venv或者virtualenvvenv是python自带的模块,virtualenv是第三方模块,通过apt install python3-virtualenv安装。

这两种模块都会创建一个隔离的环境,里面有一个 pip 。激活虚拟环境后就可以使用 pip 安装第三方模块了。

使用 venv

1
2
3
4
5
6
7
8
9
10
#创建一个虚拟环境myenv
python3 -m venv myvenv
#激活虚拟环境
source myvenv/bin/activate
#用户名前面有虚拟环境的名称,则表示成功启动
(myvenv) root@root#
#安装第三方模块
pip install xxx
#退出虚拟环境
deactivate

使用 virtualenv

virtualenvvenv的方法是一样的,只不过可以自己选择创建哪种 Python 版本的虚拟环境。

注:只能创建本机上有的 Python 版本虚拟环境

因为各种不兼容问题,通常需要安装不同版本的 Python 。

1
2
3
4
5
6
7
8
9
10
11
12
13
#安装python3.9
#安装编译环境
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev
#下载源码
wget https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tar.xz
#解压
tar xf Python-3.9.17
#进入源码目录
cd Python-3.9.17
#编译安装
./configure --prefix=/usr/local/python39
make
make install

通过以上步骤就可在/usr/local/python39目录安装 Python 3.9

1
2
3
4
5
6
7
8
9
10
11
12
#创建不同python版本的虚拟环境

#创建一个python3.9的虚拟环境
virtualenv -p /usr/local/python39/bin/python3.9 myenv
#创建默认的虚拟环境
virtualenv myenv
#激活
source myenv/bin/activate
#安装第三方模块
pip install xxx
#退出虚拟环境
deactivate

强制使用 pip 安装

如果既不想使用 apt 安装,也不想使用虚拟环境,还是可以用 pip 安装的,只不过可能会破坏环境。

后面增加可选项

安装命令后面加--break-system-packages

1
2
#安装requests模块
pip install requests --break-system-packages

配置环境变量

在pip的配置文件内配置

在pip的配置文件`~/.config/pip/pip.conf 或者 /etc/pip.conf添加以下配置

1
2
[global]
break-system-packages = true

删除系统配置

1
dpkg-divert --rename --add /usr/lib/$(py3versions -d)/EXTERNALLY-MANAGED

上面三种方式根据自己的爱好使用一种即可使用 pip 进行安装三方模块。