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