Windows msys环境编译sbinet/go-python提示缺少Python.h该如何配置
Windows msys环境go-python库编译报错解决方案
报错原因
编译时抛出
fatal error: Python.h: No such file or directory错误,核心是sbinet/go-python默认的Windows平台cgo配置指向原生Windows的Python2.7路径,和你当前使用的msys环境Python3.8路径不匹配,cgo无法找到对应的头文件和链接库。
解决步骤
- 找到本地go-python依赖的源码路径,对应报错里的路径为
C:\Users\BHARATU\go\pkg\mod\github.com\sbinet\go-python@v0.1.0,打开带// +build windows编译标记的源码文件(通常为capi.go) - 替换原有默认的cgo配置,优先使用pkg-config自动获取编译参数(你本地已经确认pkg-config可正常输出Python3.8的编译参数),修改后配置如下:
// +build windows package python // #cgo pkg-config: python // #include "go-python.h" import "C"
如果pkg-config不生效,可以手动写死msys环境的路径:
// +build windows package python // #cgo amd64 CFLAGS: -I/usr/include/python3.8 -D MS_WIN64 // #cgo amd64 LDFLAGS: -L/usr/lib -lpython3.8 // // #include "go-python.h" import "C"
- 所有编译操作必须在msys终端内执行,不要使用Windows原生cmd/PowerShell,避免路径识别异常
- 你执行的
gcc -Wall -I/usr/include/python3.8 -lpython3.8 utilsmodule.c -o Utilc报错属于正常情况,该命令需要本地存在utilsmodule.c源码文件才能运行,和当前go-python编译问题无关。
特殊情况处理
如果修改mod目录下的文件后,编译仍然读取旧配置,可以通过vendor方式固化修改:
- 在项目根目录执行
go mod vendor,将所有依赖同步到本地vendor目录 - 修改
vendor/github.com/sbinet/go-python/目录下的对应cgo配置 - 编译时添加
-mod=vendor参数,即执行go build -mod=vendor,即可使用修改后的配置完成编译
内容的提问来源于stack exchange,提问作者Uday
相关产品推荐
相关产品推荐

