必须加--prefix,无root权限时需指定用户可写绝对路径(如/home/username/local/python311),否则make install因权限拒绝失败;漏装readline-devel等依赖会导致pip异常或tab失效。

用源码编译安装 Python,必须加 --prefix
没有 root 权限时,./configure 必须指定用户可写的安装路径,否则 make install 会失败(报错类似 Permission denied)。路径建议用绝对路径,比如 /home/username/local/python311,别用 ~/local/... —— 某些 shell 下波浪号扩展可能失效。
常见漏掉的步骤:
-
./configure后检查输出末尾有没有WARNING: The Python readline extension was not compiled,缺readline-devel或libffi-devel会导致 pip 启动报错或 tab 补全失效;若系统没这些头文件,可加--without-readline --without-ensurepip先绕过,装完再单独装 pip - 务必运行
make -j$(nproc)加速编译,但别用make -j(无参数),某些老 Makefile 会崩 - 安装完不要直接执行
python3.11,先确认二进制是否存在:ls -l /home/username/local/python311/bin/python3.11
装完 Python 后,get-pip.py 要用新 Python 执行
系统自带的 python 或 python3 很可能太旧,不能跑新版 pip 安装脚本。必须显式调用你刚装的解释器:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py /home/username/local/python311/bin/python3.11 get-pip.py
注意两点:
立即学习“Python免费学习笔记(深入)”;
华为云 Python SDK 查询工具。自动发现已安装 SDK 的服务包、Client类、API 方法、入参详情、类信息(__init__ 参数、属性、类型、描述),支持关键字搜索,快速定位目标 API 使用方法。
- 别用
sudo python get-pip.py—— 这会把 pip 装进系统目录,后续你根本管不了 - 如果报
ModuleNotFoundError: No module named 'ssl',说明编译时没连 OpenSSL 库,重装 Python 时加--with-openssl=/usr(路径按实际 OpenSSL 安装位置调整)或跳过 ssl 支持(不推荐)
PATH 和命令别名怎么设才不翻车
只改 ~/.bashrc 不够,很多场景(如 crontab、SSH 直接执行、GUI 终端)不会加载它。最稳的方式是:
- 在
~/.bashrc里加:export PATH="/home/username/local/python311/bin:$PATH" - 同时加一行:
alias pip3="/home/username/local/python311/bin/pip3.11"(避免pip3指向系统旧版) - 对 cron 任务,必须写绝对路径:
/home/username/local/python311/bin/python3.11 script.py,别信#!/usr/bin/env python3
验证是否生效:新开终端,运行 which python3.11 和 python3.11 -c "import sys; print(sys.executable)",两个输出路径必须一致。
pip install 报 PermissionError?一定是没加 --user
即使你装了独立 Python,只要没改系统默认 site-packages,pip install 默认仍试图写入系统目录。必须强制用户级安装:
- 所有包都加
--user:/home/username/local/python311/bin/pip3.11 install requests --user - 别用
--prefix=~/.local替代 —— 它不生成.pth文件,import 会失败 - 装完命令行工具(如
black)找不到?检查~/.local/bin是否在$PATH里,不是你的 Python 安装目录下的bin
最容易忽略的一点:Python 启动时是否启用了用户站点。运行 python3.11 -c "import site; print(site.ENABLE_USER_SITE)",输出必须是 True。如果是 False,检查有没有设置 PYTHONNOUSERSITE=1 或启动时加了 -s 参数。

















