package py
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=bbba9188bf6dd1e573368918982ac07cab1cccde6a0a44382ca83aa4214fb2ee
sha512=459f744b8d9367692e23be0374e265f75bd356857883e7db8359061c3525011dbe99d24a52ede0fa5a37eaf04c1b72f5cba56fad94b8c85de2b46a178a996afa
Description
Simplifies the process of calling into Python from OCaml
README
py — OCaml interface to Python
v1.3
py is a ctypes interface to Python 3.5+ for OCaml
py is distributed under the ISC license.
Homepage: https://github.com/zshipko/ocaml-py
Installation
py can be installed with opam
:
$ opam install py
If your Python installation is not in the typical location you may have to set OCAML_PY_VERSION
to point to the Python .so
file.
For example, one way of finding this path:
$ find `python3 -c 'import sys, os; print(os.path.join(sys.prefix, "lib"))'` -name 'libpython*.so'
(That seems to be the most straight forward way, but let me know if there's something better!)
If you'd like to run the tests:
$ dune runtest
Introduction
Simple conversion from OCaml to Python:
open Py
let s = !$(String "a string")
let f = !$(Float 12.3)
let i = !$(Int 123)
See src/py.mli
for a full list of types.
Call a function defined in a module and return the result:
let np = PyModule.import "numpy" in
let np_array = np $. (String "array") in
let arr = np_array $ [List [Int 1; Int 2; Int 3]] in
...
Which is shorthand for
let np = PyModule.import "numpy" in
let np_array = Object.get_attr_s np "array" in
let arr = run np_array [List [Int 1; Int 2; Int 3]] in
...
Evaluate a string and return the result:
let arr = eval "[1, 2, 3]" in
...
Get object index:
let a = arr $| Int 0 in
let b = arr $| Int 1 in
let c = arr $| Int 2 in
...
Set object index:
let _ = (a_list, Int 0) <-$| Int 123 in
let _ = (a_dict, String "key") <-$| String "value" in
...
Execute a string and return true/false depending on the status returned by Python:
if exec "import tensorflow" then
let tf = PyModule.get "tensorflow" in (* Load an existing module *)
...
Dependencies (5)
- conf-python-3-dev
-
ctypes-foreign
>= "0.4.0"
-
ctypes
>= "0.13.0"
-
dune
>= "2.0"
-
ocaml
>= "4.05.0"
Dev Dependencies
None
Used by
None
Conflicts
None