在Amazon Linux 2上编译Python 3.11版mod_wsgi时遇Python.h缺失错误
解决Amazon Linux 2编译mod_wsgi适配Python3.11时找不到Python.h的问题
Python.h的默认位置
如果你是自行编译安装的Python3.11,Python.h默认位于Python安装前缀下的include/python3.11/目录,通常路径是/usr/local/include/python3.11/。你可以用以下命令确认准确路径:
python3.11 -c "import sysconfig; print(sysconfig.get_path('include'))"
核心解决方案
1. 编译mod_wsgi时指定Python3.11路径
不要依赖系统默认的python3,编译mod_wsgi时显式指定你编译的Python3.11二进制文件路径,让configure自动关联对应的头文件和库:
# 进入mod_wsgi源码目录 cd mod_wsgi-X.X.X # 指定Python3.11路径并配置 ./configure --with-python=/usr/local/bin/python3.11 # 重新编译安装 make && sudo make install
替换/usr/local/bin/python3.11为你实际的Python3.11二进制文件路径。
2. 为什么复制单个Python.h无效?
mod_wsgi编译依赖的不只是Python.h,还需要Python标准库的其他关联头文件(如pyport.h、object.h等),这些文件都在上述的include/python3.11/目录下,单独复制一个文件无法满足编译需求。
3. 关于python311-devel包的问题
Amazon Linux 2的官方软件源仅提供最高到python34-devel的包,无法通过yum/dnf获取Python3.11的开发包。因此自行编译Python3.11是唯一可行的方式——你之前编译时启用enable-shared参数是正确的,这会生成编译mod_wsgi所需的共享库和头文件。
额外排查步骤
如果configure仍无法找到头文件,可以手动指定CFLAGS参数强制引入头文件路径:
CFLAGS="-I$(python3.11 -c "import sysconfig; print(sysconfig.get_path('include'))")" ./configure --with-python=/usr/local/bin/python3.11
同时确保编译Python3.11时已经安装了必要依赖:
sudo yum install gcc make zlib-devel openssl-devel bzip2-devel libffi-devel
内容的提问来源于stack exchange,提问作者Amon
相关产品推荐
相关产品推荐

