go-python

naive go bindings to the CPython C-API

  • Owner: sbinet/go-python
  • Platform:
  • License:: Other
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

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 ?

Main metrics

Overview
Name With Ownersbinet/go-python
Primary LanguageGo
Program languageMakefile (Language Count: 4)
Platform
License:Other
所有者活动
Created At2012-07-09 15:43:31
Pushed At2023-07-24 07:11:30
Last Commit At2023-07-24 09:11:30
Release Count4
Last Release Namev0.1.0 (Posted on )
First Release Namego.weekly.2011-11-09 (Posted on )
用户参与
Stargazers Count1.5k
Watchers Count48
Fork Count139
Commits Count171
Has Issues Enabled
Issues Count84
Issue Open Count24
Pull Requests Count28
Pull Requests Open Count3
Pull Requests Close Count6
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private