Scientific Linux7.9安装含Cython的Python包时gcc找不到已在include路径的Python.h
问题排查与解决
首先排除权限问题
你不需要执行chown修改目录权限,你给出的ls结果显示Python.h的权限为rw-r--r--,所有用户都拥有读取权限,同环境其他机器无需权限操作也能正常安装也验证了这一点。
核心问题根源
查看编译日志中gcc的头文件搜索参数:你给出的编译命令里明确指定了-I/opt/rh/rh-python38/root/include/python3.8,但你实际的Python.h存放在/opt/rh/rh-python38/root/usr/include/python3.8/,二者差了/usr层级,导致gcc无法找到头文件。
这个错误是当前你使用的Python虚拟环境的配置异常导致的:setuptools在构建扩展时读取到了错误的Python头文件路径。
解决步骤
- 第一步:验证路径错误
执行以下命令确认当前Python读取到的头文件路径是否异常:
如果输出结果为python -c "import sysconfig; print(sysconfig.get_path('include'))"/opt/rh/rh-python38/root/include/python3.8即可确认问题。 - 第二步:临时修复(单次编译生效)
执行以下命令手动添加正确的头文件路径到gcc搜索目录,再执行安装:export CPATH=/opt/rh/rh-python38/root/usr/include/python3.8:$CPATH python setup.py install - 第三步:永久修复
先删除当前异常的虚拟环境,重新创建虚拟环境:# 先激活rh-python38官方环境 source /opt/rh/rh-python38/enable # 再用官方Python创建新的虚拟环境 python -m venv 你的虚拟环境路径 # 激活新虚拟环境后再安装包即可
内容的提问来源于stack exchange,提问作者jon_two
相关产品推荐
相关产品推荐

