酷徒LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:C Api  bindings  API  BIN  Cpython  
naive go bindings to the CPython C-API

  • 源代码名称:go-python
  • 源代码网址:http://www.github.com/sbinet/go-python
  • go-python源代码文档
  • go-python源代码下载
  • Git URL:
    git://www.github.com/sbinet/go-python.git
  • Git Clone代码到本地:
    git clone http://www.github.com/sbinet/go-python
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/sbinet/go-python
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • python

    面向CPython-2的c api的天真 go 绑定。

    这个软件包提供一个名为"python"的go 包,其中CPython的public c api的大多数 PyXYZ 函数和宏都被公开。

    理论上,你应该能够看到:

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

    并且知道在 go 程序中输入什么。

    这个包还提供一个可以执行的"转到 python",它只加载"python"然后调用 python.Py_Main(os.Args)。 这种可以执行方法的合理性在于,基于 go的扩展扩展更容易实现( 因为这通常意味着通过一些相当复杂的函数调用从 C 调用 go )

    安装

    使用 Go 1go 工具,cgo 软件包不能再从外部程序( 除了 pkg-config ) 传递额外的CGO_CFLAGS 到"伪" #cgo 预处理器指令。

    go-python 现在使用 pkg-config 来获取头文件和库的正确位置。 不幸的是,pkg-config 包的命名约定不是跨发行版和操作系统标准化的,因此你可能需要相应地编辑 cgoflags.go 文件。

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

    如果 go get + pkg-config 失败:

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

    :你需要正确的和 python 开发环境。 在Debian上,你需要安装 python-all-dev

    文档

    godoc 上可用:

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

    示例:

    package mainimport"fmt"import"github.com/sbinet/go-python"funcinit() {
     err:= python.Initialize()
     if err!= nil {
     panic(err.Error())
     } 
    }funcmain() {
     gostr:="foo" 
     pystr:= python.PyString_FromString(gostr)
     str:= python.PyString_AsString(pystr)
     fmt.Println("hello [", str, "]")
    }
    $ go run./main.go
    hello [ foo ]

    待办事项:

    • 修正整数处理( 我在确保一切正常的时候做得很差)

    • 添加CPython单元测试

    • 不公开 C.FILE 指针,并在"转到 python"api中将它的替换为 os.File

    • 提供一种简单的方法来扩展到基于 go

    • 考虑( 或者不) 将CPython异常转换为 go/恢复机制的需要

    • 使用SWIG自动包装整个 CPython api?



    文章标签:API  BIN  bindings  Cpython  C Api  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备17041772号-2  |  如果智培  |  酷兔英语  |  帮酷