【Python+C+Golang】在Go中使用go-python调用python模块--底层为借助Python/C API 来C调用Python
2021/11/19 1:10:20
本文主要是介绍【Python+C+Golang】在Go中使用go-python调用python模块--底层为借助Python/C API 来C调用Python,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文记录debug经验
API
PyObject* PyImport_ImportModule(const char *name) //Return value: New reference. 返回__import__(name)
使用此API在Go中导入Python的模块。
Python代码如下:
hello.py:
import numpy import sklearn a=10 def b(xixi): return xixi+"haha" print("calling python success")
将该文件放在helloworld文件夹下,在helloworld文件夹下再创建一个空文件__init__
,于是hello可以作为模块被import。
Go代码如下:
package main import( "github.com/sbinet/go-python" "fmt" ) func init(){ err :=python.Initialize() if err != nil{ panic(err.Error()) } } var PyStr = python.PyString_FromString // ImportModule will import python module from given directory func ImportModule(dir, name string) *python.PyObject { sysModule := python.PyImport_ImportModule("sys") // import sys path := sysModule.GetAttrString("path") // path = sys.path python.PyList_Insert(path, 0, PyStr(dir)) // path.insert(0, dir) fmt.Println(path) return python.PyImport_ImportModule(name) // return __import__(name) } func main(){ hello:= ImportModule("/opt/py/helloworld","hello") //注意包名hello和文件夹名字helloworld不能一样 if hello == nil{ python.PyErr_Print() fmt.Println("import module error") } fmt.Println(hello) }
问题
总是返回空指针,表明没有import成功。
在确保路径都没错的情况下,调用python.PyErr_Print()
终发现是环境中没有sklearn。
由于我有多个环境,在sys.path中的多个python环境都应该满足所有的依赖要求才行。
得善用API提供的Debug工具呀
这篇关于【Python+C+Golang】在Go中使用go-python调用python模块--底层为借助Python/C API 来C调用Python的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程