登录
首页 >  Golang >  Go问答

在Go中使用Python嵌入Golang

来源:stackoverflow

时间:2024-02-10 17:36:23 475浏览 收藏

一分耕耘,一分收获!既然都打开这篇《在Go中使用Python嵌入Golang》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我一直在阅读文章“embedding-python-in-go”和原始文章“packaging-python-code”,但我尚未成功通过 cgo 运行 python.h。

这可以在 m1 mac 上完成吗?如果没有,我应该将所有内容移植到 linux docker 容器中吗?

在设置此类项目时我缺少什么。

下面是第 1 篇文章中的一个简单示例。 这会导致错误

./main.go:22:4:无法确定 c.pyrun_simplestring 的名称类型

1 package main
 2 /*
 3  #cgo pkg-config: python3
 #include <python/python.h>
 4 */
 5 import "c"
 6
 7 import (
 8   "unsafe"
 9 )
10 
11 func main() {
12
13   pycodego := `
14 import sys
15 for path in sys.path:
16   print(path)
17 ` 
18   
19   defer c.py_finalize()
20   c.py_initialize()
21   pycodec := c.cstring(pycodego)
22   defer c.free(unsafe.pointer(pycodec))
23   c.pyrun_simplestring(pycodec)
24 
25 }

删除第 20-23 行会返回错误

# command-line-arguments
Undefined symbols for architecture arm64:
  "_Py_Finalize", referenced from:
      __cgo_672c0788d500_Cfunc_Py_Finalize in _x002.o
     (maybe you meant: __cgo_672c0788d500_Cfunc_Py_Finalize)
  "_Py_Initialize", referenced from:
      __cgo_672c0788d500_Cfunc_Py_Initialize in _x002.o
     (maybe you meant: __cgo_672c0788d500_Cfunc_Py_Initialize)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [run] Error 2

有点迷失架构错误; m1问题?

在 mac 上导入 python.h 是 #include <python/python.h> 而不是 #include <python.h> 在 mac 上导入 python.h

软件规格

$ python3 -v python 3.9.10

$ go版本go版本go1.17.8 darwin/arm64

macos 版本 11.4,m1 2020。

python.h 位于/library/developer/commandlinetools/library/frameworks/python3.framework/versions/3.8/headers/python.h 下

参考 git repos ardanlabs/python-go go-python3 christian-korneck/python-go


正确答案


当你第一次使用 go 的 cgo 实现及其错误消息时,它是一个具有挑战性的野兽。

cgo 和 c/c++ 包含的规则是你必须在包含后使用导入“c”,否则你不知道你做错了什么。因此,将您的包含/导入更新为:

// #include <Python.h>
import "C"

今天关于《在Go中使用Python嵌入Golang》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>