go-python

naive go bindings to the CPython C-API

  • 所有者: sbinet/go-python
  • 平台:
  • 許可證: Other
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

go-python

Build Status
Build status

Naive go bindings towards the C-API of CPython-2.

this package provides a go package named "python" under which most of the PyXYZ functions and macros of the public C-API of CPython have been exposed.

theoretically, you should be able to just look at:

http://docs.python.org/c-api/index.html

and know what to type in your go program.

this package also provides an executable "go-python" which just loads "python" and then call python.Py_Main(os.Args).
the rational being that under such an executable, go based extensions for C-Python would be easier to implement (as this usually means calling into go from C through some rather convoluted functions hops)

Install

With Go 1 and the go tool, cgo packages can't pass anymore
additional CGO_CFLAGS from external programs (except pkg-config)
to the "fake" #cgo preprocessor directive.

go-python now uses pkg-config to get the correct location of
headers and libraries.
Unfortunately, the naming convention for the pkg-config package is
not standardised across distributions and OSes, so you may have to
edit the cgoflags.go file accordingly.

 $ go get github.com/sbinet/go-python

If go get + pkg-config failed:

 $ cd go-python
 $ edit cgoflags.go
 $ make VERBOSE=1

Note: you'll need the proper header and python development environment. On Debian, you'll need to install the python-all-dev package

Documentation

Is available on godoc:

http://godoc.org/github.com/sbinet/go-python

Example:

package main

import "fmt"
import "github.com/sbinet/go-python"

func init() {
   err := python.Initialize()
   if err != nil {
          panic(err.Error())
   } 
}

func main() {
 	 gostr := "foo" 
	 pystr := python.PyString_FromString(gostr)
	 str := python.PyString_AsString(pystr)
	 fmt.Println("hello [", str, "]")
}
$ go run ./main.go
hello [ foo ]

TODO:

  • fix handling of integers (I did a poor job at making sure everything was ok)

  • add CPython unit-tests

  • do not expose C.FILE pointer and replace it with os.File in "go-python" API

  • provide an easy way to extend go-python with go based extensions

  • think about the need (or not) to translate CPython exceptions into go panic/recover mechanism

  • use SWIG to automatically wrap the whole CPython api ?

主要指標

概覽
名稱與所有者sbinet/go-python
主編程語言Go
編程語言Makefile (語言數: 4)
平台
許可證Other
所有者活动
創建於2012-07-09 15:43:31
推送於2023-07-24 07:11:30
最后一次提交2023-07-24 09:11:30
發布數4
最新版本名稱v0.1.0 (發布於 )
第一版名稱go.weekly.2011-11-09 (發布於 )
用户参与
星數1.5k
關注者數48
派生數139
提交數171
已啟用問題?
問題數84
打開的問題數24
拉請求數28
打開的拉請求數3
關閉的拉請求數6
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?