enso/docs/polyglot/python.md
Pavel Marek a67297aebf
Add graalpy packages to the component directory (#8351)
Adds these JAR modules to the `component` directory inside Engine distribution:
- `graal-language-23.1.0`
- `org.bouncycastle.*` - these need to be added for graalpy language

# Important Notes
- Remove `org.bouncycastle.*` packages from `runtime.jar` fat jar.
- Make sure that the `./run` script preinstalls GraalPy standalone distribution before starting engine tests
- Note that using `python -m venv` is only possible from standalone distribution, we cannot distribute `graalpython-launcher`.
- Make sure that installation of `numpy` and its polyglot execution example works.
- Convert `Text` to `TruffleString` before passing to GraalPy - 8ee9a2816f
2023-12-04 11:50:59 +00:00

2.7 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.

Install Graal Python standalone distribution

Before continuing this tutorial, you need to install Graal Python standalone distribution. Follow the instructions from https://www.graalvm.org/latest/reference-manual/python/#installing-graalpy. Note that for the basic Python usage, it is not necessary to download the GraalPy standalone distribution, we just need it for this tutorial because we initialize the virtual environment and install numpy package with it.

In the rest of the document, graalpy points to the bin/graalpy binary from the downloaded Graal Python standalone distribution.

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
$ 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.