You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CentOS 7上编译CPython 3.11时缺失encodings模块的问题

解决CentOS7编译Python3.11.x时的encodings模块缺失问题

一、先补全编译依赖

CentOS7默认缺少Python编译所需的基础库,先执行以下命令安装:

yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel ncurses-devel

二、清理旧编译残留

避免之前的编译文件干扰新的编译过程:

cd Python-3.11.2
make clean
rm -rf ./build

三、指定关键参数重新编译

核心是让编译过程完全依赖源码自身环境,不调用系统旧版Python,同时明确安装路径:

./configure --prefix=/usr/local/python311 --enable-shared --with-system-ffi

参数说明:

  • --prefix:指定独立安装路径,避免覆盖系统默认Python
  • --enable-shared:编译共享库,确保bootstrap程序能找到正确的Python核心依赖
  • --with-system-ffi:复用系统libffi库,减少编译时的依赖冲突

接着执行编译与安装:

make -j$(nproc)
make altinstall

使用altinstall而非install,防止替换系统默认的python/python3软链接。

四、修正sys._base_executable指向旧版的问题

编译时bootstrap程序调用旧版Python,是因为configure默认检测并使用了系统的Python3.6。解决方法是配置环境变量,让新安装的Python优先被调用:

echo 'export PATH=/usr/local/python311/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/python311/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

之后重新打开终端,sys._base_executable会指向新安装的Python路径。

五、验证编译结果

执行以下命令确认encodings模块正常加载:

python3.11 -c "import encodings; print(encodings.__file__)"

正常输出应为/usr/local/python311/lib/python3.11/encodings/__init__.py。

额外注意

  • 不要在virtualenv环境下编译Python源码,虚拟环境会引入旧Python环境的干扰
  • 若仍有报错,检查是否遗漏了开发包,或删除源码目录重新解压编译

内容的提问来源于stack exchange,提问作者Tunneller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:55:32