在Ubuntu系统中安装Python第三方库与问题处理

背景

在Ubuntu22.04及以上系统版本中使用pip3命令安装第三方库时报error: externally-managed-environment错误。

分析

由于Ubuntu系统采用了PEP668规范,限制了用户在Ubuntu系统的Python环境中直接使用pip命令进行包的安装,防止用户安装的第三方包破坏系统自带的Python环境。

解决途径

方法一.使用--break-system-packages参数

代码语言:bash复制
pip3 install requests --break-system-packages

使用该参数,可以将第三方库强制安装至系统的Python环境。在安装过程中,系统仍然会提示强制安装的风险。

方法二.使用venv虚拟环境(推荐)

该方法旨在Ubuntu系统中创建一个用户维度的虚拟Python环境。该虚拟环境不会与系统自带的Python环境产生交集。后续在Python程序的开发与测试中只需要在虚拟环境中进行依赖的安装与配置即可,灵活性更高。

代码语言:bash复制
# 创建虚拟环境
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
#在虚拟环境中安装第三方包
pip install requests

Ubuntu系统中Python虚拟环境的配置与使用

方法一.在脚本顶部指定venv的Python解释器

代码语言:bash复制
#!/path/to/venv/bin/python

直接在脚本中指定虚拟环境的Python解释器的路径。

然后对脚本赋予可执行权限

代码语言:bash复制
chmod +x test.py

运行./test.py这样Python脚本在执行时就会使用虚拟环境中配置的Python解释器。

方法二.手动激活虚拟环境

代码语言:bash复制
source /home/user/myenv/bin/activate

然后执行python test.py

方法三.在脚本中手动激活venv虚拟环境

代码语言:python代码运行次数:0运行复制
import os
import sys

venv_path = "/home/user/myenv"
activate_script = os.path.join(venv_path, "bin", "activate_this.py")

with open(activate_script) as f:
    exec(f.read(), dict(__file__=activate_script))

# 现在可以直接使用venv里的库
import requests
print(requests.__version__)

方法四.为特定用户创建bin目录

Ubuntu默认会优先搜索/usr/lib目录下安装的包。我们可以通过软链接的方式将虚拟环境的Python软链接之lib目录下。之前安装的第三方库也可以cp到软链接后的目录下。这个方法可以使我们默认使用虚拟环境,避免每次对虚拟环境进行激活。

代码语言:bash复制
ln -s ~/myenv/bin/python3 /usr/lib
cp ~/myenv/bin/python3/site-packages/* /usr/lib/python3.12/site-packages

然后在~/.bashrc中添加:

代码语言:bash复制
export PYTHON_PATH="/root/myenv/bin"
export PATH="$PYTHON_PATH:$PATH"