报错信息表明你的Debian 12系统默认禁止使用 pip3 在系统全局安装Python包。这是Debian为了避免包管理冲突而采取的安全措施。 解决此问题,有以下几种方法,推荐使用虚拟环境。

1. 使用虚拟环境 (推荐)

这是最安全、最推荐的方法,可以避免污染系统环境,并且方便管理项目依赖。

# 1. 确保你安装了 python3-venv 包
sudo apt update
sudo apt install python3-venv

# 2. 创建虚拟环境
python3 -m venv .venv  #  `.venv` 是虚拟环境目录,你也可以使用其他名字。推荐使用 `.venv` 使其在终端中隐藏。

# 3. 激活虚拟环境
source .venv/bin/activate

# 4. 在虚拟环境中安装依赖
pip3 install -r requirements-cli.txt

# 完成后,退出虚拟环境
deactivate

解释:

  • python3 -m venv .venv 创建一个名为 .venv 的虚拟环境。
  • source .venv/bin/activate 激活虚拟环境。激活后,你的 shell 提示符会发生变化,通常会显示虚拟环境的名称。
  • pip3 install -r requirements-cli.txt 在激活的虚拟环境中安装 requirements-cli.txt 中列出的依赖包。 所有安装的包都将安装到虚拟环境,不会影响系统级别的Python环境。
  • deactivate 退出虚拟环境。

2. 使用 pipx (适合安装命令行工具)

如果你要安装的是一个命令行工具,可以使用 pipxpipx 会为每个工具创建一个独立的虚拟环境。

# 1. 安装 pipx
sudo apt install pipx

# 2. 确保 pipx 可用
pipx ensurepath

# 3. 安装依赖包列表里面的所有包,需要解析 requirements-cli.txt 文件,然后逐个安装
# 由于pipx无法直接安装requirements.txt,所以需要将requirements-cli.txt的内容解析出来,然后使用pipx install xxx的方式安装。
# 创建一个脚本,例如 install_with_pipx.sh,写入如下内容:
# cat install_with_pipx.sh
#!/bin/bash
while IFS= read -r line; do
  if [[ ! "$line" =~ ^#.*$ ]]; then # 忽略注释行
    if [[ -n "$line" ]]; then # 忽略空行
      pipx install "$line"
    fi
  fi
done < requirements-cli.txt

# 添加可执行权限
chmod +x install_with_pipx.sh

# 执行脚本
./install_with_pipx.sh

解释:

  • sudo apt install pipx 安装 pipx
  • pipx ensurepath 确保 pipx 的命令可以被找到(修改 PATH 环境变量)。可能需要重启 shell 或者执行 source ~/.profile 或者 source ~/.bashrc 使更改生效。
  • 脚本install_with_pipx.sh 逐行读取 requirements-cli.txt 文件,并使用 pipx install 命令安装每个包。 它会忽略注释行和空行。

3. 使用 --break-system-packages (不推荐)

警告: 强烈不推荐使用此方法,除非你非常清楚自己在做什么。 这可能会破坏你的系统Python环境,导致系统工具无法正常工作。

pip3 install --break-system-packages -r requirements-cli.txt

解释:

  • --break-system-packages 强制 pip3 忽略系统的保护机制,直接安装到系统全局环境。再次强调,不推荐使用。

总结和建议:

  • 总是优先使用虚拟环境。 这是最安全、最干净、最可控的方式。
  • 如果你要安装的是命令行工具,可以考虑使用 pipx
  • 只有在你完全理解风险的情况下,才考虑使用 --break-system-packages
  • 如果你不确定,请提供 requirements-cli.txt 文件的内容,我可以帮你分析并给出更具体的建议。

根据你的描述,推荐你使用第一种方法,创建并激活虚拟环境后,再安装依赖。 这样能避免很多潜在的问题。

最后修改:2025 年 07 月 08 日
如果觉得我的文章对你有用,请随