在RHEL机器上编译Python 3.11.1源码时无法初始化sys模块
问题描述
在RHEL机器上编译Python 3.11.1源码时执行make命令报错,操作流程如下:
wget https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tgz tar -xvf Python-3.11.1.tgz cd Python-3.11.1 ./configure --enable-shared --prefix=$INSTALL_DIR --enable-optimizations make
执行make时触发的错误信息:
./Programs/_freeze_module importlib._bootstrap ./Lib/importlib/_bootstrap.py Python/frozen_modules/importlib._bootstrap.h Fatal Python error: _PySys_InitCore: can't initialize sys module Python runtime state: preinitialized Current thread 0x00007f163a9d4740 (most recent call first): <no Python frame> make[1]: *** [Python/frozen_modules/importlib._bootstrap.h] Error 1
问题原因与解决办法
可能原因及对应修复方案:
- 系统依赖缺失
Python 3.11编译依赖多个基础系统库,RHEL默认环境可能未完整安装,缺失的库会导致sys模块初始化失败。
修复:以root身份安装编译依赖:
yum install -y gcc gcc-c++ make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
之后清理之前的编译残留,重新配置编译:
make clean ./configure --enable-shared --prefix=$INSTALL_DIR --enable-optimizations make
- 动态库路径未正确设置
使用--enable-shared参数编译时,临时生成的二进制文件可能无法找到当前编译的Python动态库,导致初始化出错。
修复:编译前设置环境变量指定动态库路径:
export LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH
然后重新执行make即可。
- 优化参数兼容性问题
--enable-optimizations会启用PGO优化,部分RHEL版本的GCC编译器可能与该选项不兼容,引发编译流程错误。
修复:移除优化参数后重新编译:
make clean ./configure --enable-shared --prefix=$INSTALL_DIR make
内容的提问来源于stack exchange,提问作者Bryan Tan
相关产品推荐
相关产品推荐

