enso/docs/polyglot/python.md
2023-08-30 06:10:18 +02:00

2.1 KiB

layout title category tags order
developer-doc Polyglot Python polyglot
polyglot
python
4

Polyglot Python

This document provides practical example showing polyglot interoperability with Python in the runtime. Please familiarise yourself with the general operation of polyglot bindings.

Polyglot Library System

There is a support for using any Python library from Enso. Steps to include numpy in a new Enso project follows:

$ enso-engine*/bin/enso --new numenso
$ find numenso/
numenso/
numenso/src
numenso/src/Main.enso
numenso/package.yaml
$ mkdir numenso/polyglot
$ graalvm/bin/gu install python
$ graalvm/bin/graalpy -m venv numenso/polyglot/python
$ ./numenso/polyglot/python/bin/graalpy -m pip install numpy
Successfully installed numpy-1.23.5

The above steps instruct Enso to create a new project in numenso directory. Then they create Python virtual environment in numenso/polyglot/python/ dir - e.g. in the standard location for polyglot components of an Enso project. As a last step we activate the virtual environment and use pip manager to install numpy library.

Using Python Libraries

As soon as a library is installed into the polyglot directory it can be used via the embedded syntax:

foreign python random_array s = """
    import numpy
    return numpy.random.normal(size=s)

main = random_array 10

Let's modify the numenso/src/Main.enso to use numpy.random.normal as shown above. Then we can simply execute the project and obtain a numpy array as a result:

$ enso-engine*/bin/enso --run numenso
array([-0.51884419, -0.23670113, -1.20493508, -0.86008709,  0.59403118,
       -0.171484  , -1.19455596, -0.30096434, -0.69762239, -0.11411331])

The same steps can be applied to any Graal Python supported library.