报错信息表明你的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
(适合安装命令行工具)
如果你要安装的是一个命令行工具,可以使用 pipx
。pipx
会为每个工具创建一个独立的虚拟环境。
# 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
文件的内容,我可以帮你分析并给出更具体的建议。
根据你的描述,推荐你使用第一种方法,创建并激活虚拟环境后,再安装依赖。 这样能避免很多潜在的问题。