layout | title | category | tags | order | ||
---|---|---|---|---|---|---|
developer-doc |
Polyglot Python |
polyglot |
|
4 |
This document provides practical example showing polyglot interoperability with Python in the runtime. Please familiarise yourself with the general operation of polyglot bindings.
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.
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.
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.