https://github.com/DataDog/go-python3
Go bindings to the CPython-3 API
https://github.com/DataDog/go-python3
bindings go golang python python3
Last synced: 3 months ago
JSON representation
Go bindings to the CPython-3 API
- Host: GitHub
- URL: https://github.com/DataDog/go-python3
- Owner: DataDog
- License: mit
- Archived: true
- Created: 2018-11-05T18:05:32.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2021-11-02T16:03:07.000Z (almost 4 years ago)
- Last Synced: 2024-08-07T23:47:32.029Z (about 1 year ago)
- Topics: bindings, go, golang, python, python3
- Language: Go
- Homepage:
- Size: 82 KB
- Stars: 376
- Watchers: 16
- Forks: 139
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
**This repo will be archived on December 1st 2021. While still readable it will no longer be maintained.** There's a community maintained successor of this project at https://github.com/go-python/cpy3 .
# go-python3
**Currently supports python-3.7 only.**
Golang bindings for the C-API of CPython-3.
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 use https://docs.python.org/3/c-api
and know what to type in your ``go`` program.This project was inspired by https://github.com/sbinet/go-python. Go and take a look if we need something for python-2.7!
# Install
## Deps
We will need `pkg-config` and a working `python3.7` environment to build these
bindings. Make sure you have Python libraries and header files installed as
well (`python3.7-dev` on Debian or `python3-devel` on Centos for example)..By default `pkg-config` will look at the `python3` library so if you want to
choose a specific version just symlink `python-X.Y.pc` to `python3.pc` or use
the `PKG_CONFIG_PATH` environment variable.## Go get
Then simply `go get github.com/DataDog/go-python3`
# API
Some functions mix go code and call to Python function. Those functions will
return and `int` and `error` type. The `int` represent the Python result code
and the `error` represent any issue from the Go layer.Example:
`func PyRun_AnyFile(filename string)` open `filename` and then call CPython API
function `int PyRun_AnyFile(FILE *fp, const char *filename)`.Therefore its signature is `func PyRun_AnyFile(filename string) (int, error)`,
the `int` represent the error code from the CPython `PyRun_AnyFile` function
and error will be set if we failed to open `filename`.If an error is raise before calling th CPython function `int` default to `-1`.
Take a look at some [examples](examples)