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
2.7 KiB
layout | title | category | tags | order | ||
---|---|---|---|---|---|---|
developer-doc | Polyglot Python | polyglot |
|
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.