py/README
This commit is contained in:
33
py/README.md
Normal file
33
py/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
Linking Python to Go
|
||||
=====
|
||||
|
||||
TODO
|
||||
|
||||
## Demo
|
||||
|
||||
The `_demo` directory contains our demos (it start with `_` to prevent the `go` command from compiling it):
|
||||
|
||||
* [hellopy](_demo/hellopy/hello.go): link Python to Go and say `Hello world`
|
||||
* [clpy](_demo/clpy/cleval.go): compile Python code and eval.
|
||||
* [callpy](_demo/callpy/call.go): call Python standard library function `math.sqrt`.
|
||||
|
||||
### How to run demos
|
||||
|
||||
To run the demos in directory `_demo`, you need to set the `LLGO_LIB_PYTHON` environment variable first. Assuming you use Python 3.12, and the `libpython3.12.so` (or `libpython3.12.dylib` or `python3.12.lib`) file is in the /foo/bar directory, then you need to set `LLGO_LIB_PYTHON` to:
|
||||
|
||||
```sh
|
||||
export LLGO_LIB_PYTHON=/foo/bar/python3.12
|
||||
```
|
||||
|
||||
For example, `/opt/homebrew/Frameworks/Python.framework/Versions/3.12/libpython3.12.dylib` is a typical python lib location under macOS. So we should set it like this:
|
||||
|
||||
```sh
|
||||
export LLGO_LIB_PYTHON=/opt/homebrew/Frameworks/Python.framework/Versions/3.12/python3.12
|
||||
```
|
||||
|
||||
Then you can run the demos in directory `_demo`:
|
||||
|
||||
```sh
|
||||
cd <demo-directory> # eg. cd _demo/hellopy
|
||||
llgo run .
|
||||
```
|
||||
16
py/_demo/callpy/call.go
Normal file
16
py/_demo/callpy/call.go
Normal file
@@ -0,0 +1,16 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/py"
|
||||
)
|
||||
|
||||
func main() {
|
||||
py.Initialize()
|
||||
py.SetProgramName(*c.Argv)
|
||||
math := py.ImportModule(c.Str("math"))
|
||||
sqrt := math.GetAttrString(c.Str("sqrt"))
|
||||
sqrt2 := sqrt.CallOneArg(py.Float(2)).FloatAsDouble()
|
||||
c.Printf(c.Str("sqrt(2) = %f\n"), sqrt2)
|
||||
py.Finalize()
|
||||
}
|
||||
23
py/_demo/clpy/cleval.go
Normal file
23
py/_demo/clpy/cleval.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/py"
|
||||
)
|
||||
|
||||
func main() {
|
||||
py.Initialize()
|
||||
py.SetProgramName(*c.Argv)
|
||||
code := py.CompileString(c.Str(`print('Hello, World!')`), c.Str(`hello.py`), py.EvalInput)
|
||||
if code != nil {
|
||||
mod := py.ImportModule(c.Str("__main__"))
|
||||
gbl := mod.GetDict()
|
||||
|
||||
result := py.EvalCode(code, gbl, nil)
|
||||
|
||||
result.DecRef()
|
||||
mod.DecRef()
|
||||
code.DecRef()
|
||||
}
|
||||
py.Finalize()
|
||||
}
|
||||
13
py/_demo/hellopy/hello.go
Normal file
13
py/_demo/hellopy/hello.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/py"
|
||||
)
|
||||
|
||||
func main() {
|
||||
py.Initialize()
|
||||
py.SetProgramName(*c.Argv)
|
||||
py.RunSimpleString(c.Str(`print('Hello, World!')`))
|
||||
py.Finalize()
|
||||
}
|
||||
Reference in New Issue
Block a user