oracle / graalpython

A Python 3 implementation built on GraalVM
Other
1.17k stars 101 forks source link

GraalPy, the GraalVM Implementation of Python

Join Slack GraalVM on Twitter License

GraalPy is a high-performance implementation of the Python language for the JVM built on GraalVM. GraalPy has first-class support for embedding in Java and can turn Python applications into fast, standalone binaries.

Why GraalPy?

Low-overhead integration with Java and other languages

Compatible with the Python ecosystem

Runs Python code faster

Getting Started

Embedding GraalPy in Java GraalPy is [available on Maven Central](https://central.sonatype.com/artifact/org.graalvm.polyglot/python) for inclusion in Java projects. Refer to our [embedding documentation](https://www.graalvm.org/latest/reference-manual/embed-languages/) for more details. * Maven ```xml org.graalvm.polyglot polyglot 24.0.0 org.graalvm.polyglot python 24.0.0 pom ``` * Gradle ```kotlin implementation("org.graalvm.polyglot:polyglot:24.0.0") implementation("org.graalvm.polyglot:python:24.0.0") ```
Replacing CPython with GraalPy GraalPy should in many cases work as a drop-in replacement for CPython. You can use `pip` to install packages as usual. Packages with C code usually do not provide binaries for GraalPy, so they will be automatically compiled during installation. This means that build tools have to be available and installation will take longer. We provide [Github actions](scripts/wheelbuilder) to help you build binary packages with the correct dependencies. Thanks to our integration with GraalVM Native Image, we can deploy Python applications as [standalone binary](docs/user/Python-Standalone-Applications.md), all dependencies included. * Linux The easiest way to install GraalPy on Linux is to use [Pyenv](https://github.com/pyenv/pyenv) (the Python version manager). To install version 24.0.0 using Pyenv, run the following commands: ```bash pyenv install graalpy-24.0.0 ``` ```bash pyenv shell graalpy-24.0.0 ``` Alternatively, you can download a compressed GraalPy installation file from [GitHub releases](https://github.com/oracle/graalpython/releases). 1. Find the download that matches the pattern _graalpy-XX.Y.Z-linux-amd64.tar.gz_ or _graalpy-XX.Y.Z-linux-aarch64.tar.gz_ (depending on your platform) and download. 2. Uncompress the file and update your `PATH` environment variable to include the _graalpy-XX.Y.Z-linux-amd64/bin_ (or _graalpy-XX.Y.Z-linux-aarch64/bin_) directory. * macOS The easiest way to install GraalPy on macOS is to use [Pyenv](https://github.com/pyenv/pyenv) (the Python version manager). To install version 24.0.0 using Pyenv, run the following commands: ```bash pyenv install graalpy-24.0.0 ``` ```bash pyenv shell graalpy-24.0.0 ``` Alternatively, you can download a compressed GraalPy installation file from [GitHub releases](https://github.com/oracle/graalpython/releases). 1. Find the download that matches the pattern _graalpy-XX.Y.Z-macos-amd64.tar.gz_ or _graalpy-XX.Y.Z-macos-aarch64.tar.gz_ (depending on your platform) and download. 2. Remove the quarantine attribute. ```bash sudo xattr -r -d com.apple.quarantine /path/to/graalpy ``` For example: ```bash sudo xattr -r -d com.apple.quarantine ~/.pyenv/versions/graalpy-24.0.0 ``` 3. Uncompress the file and update your `PATH` environment variable to include to the _graalpy-XX.Y.Z-macos-amd64/bin_ (or _graalpy-XX.Y.Z-macos-aarch64/bin_) directory. * Windows The Windows support of GraalPy is still experimental, so not all features and packages may be available. 1. Find and download a compressed GraalPy installation file from [GitHub releases](https://github.com/oracle/graalpython/releases) that matches the pattern _graalpy-XX.Y.Z-windows-amd64.tar.gz_. 2. Uncompress the file and update your `PATH` variable to include to the _graalpy-XX.Y.Z-windows-amd64/bin_ directory.
Using GraalPy in Github Actions The _setup-python_ action supports GraalPy: ```yaml - name: Setup GraalPy uses: actions/setup-python@v5 with: python-version: graalpy # or graalpy24.0 to pin a version ```
Migrating Jython Scripts to GraalPy Most existing Jython code that uses Java integration will be based on a stable Jython release—however, these are only available in Python 2.x versions. To migrate your code from Python 2 to Python 3, follow [the official guide from the Python community](https://docs.python.org/3/howto/pyporting.html). GraalPy provides a [special mode](docs/user/Python-on-JVM.md) to facilitate migration. To run Jython scripts, you need to use a GraalPy distribution running on the JVM so you can access Java classes from Python scripts. * Linux 1. Find and download a compressed GraalPy installation file from [GitHub releases](https://github.com/oracle/graalpython/releases) that matches the pattern _graalpy-jvm-XX.Y.Z-linux-amd64.tar.gz_ or _graalpy-jvm-XX.Y.Z-linux-aarch64.tar.gz_ (depending on your platform) and download. 2. Uncompress the file and update your `PATH` environment variable to include the _graalpy-jvm-XX.Y.Z-linux-amd64/bin_ (or _graalpy-jvm-XX.Y.Z-linux-aarch64/bin_) directory. 3. Run your scripts with `graalpy --python.EmulateJython`. * macOS 1. Find and download a compressed GraalPy installation file from [GitHub releases](https://github.com/oracle/graalpython/releases) that matches the pattern _graalpy-jvm-XX.Y.Z-macos-amd64.tar.gz_ or _graalpy-jvm-XX.Y.Z-macos-aarch64.tar.gz_ (depending on your platform) and download. 2. Remove the quarantine attribute. ```bash sudo xattr -r -d com.apple.quarantine /path/to/graalpy ``` For example: ```bash sudo xattr -r -d com.apple.quarantine ~/.pyenv/versions/graalpy-24.0.0 ``` 3. Uncompress the file and update your `PATH` environment variable to include to the _graalpy-jvm-XX.Y.Z-macos-amd64/bin_ (or _graalpy-jvm-XX.Y.Z-macos-aarch64/bin_) directory. 4. Run your scripts with `graalpy --python.EmulateJython`. * Windows 1. Find and download a compressed GraalPy installation file from [GitHub releases](https://github.com/oracle/graalpython/releases) that matches the pattern _graalpy-jvm-XX.Y.Z-windows-amd64.tar.gz_. 2. Uncompress the file and update your `PATH` variable to include to the _graalpy-jvm-XX.Y.Z-windows-amd64/bin_ directory. 3. Run your scripts with `graalpy --python.EmulateJython`.

Examples

Java AWT app with Python graph library using JBang  |  Standalone binary of a Python game by Joey Navarro with all dependencies included.

Documentation

GraalPy Quick Reference Sheet should help you get started. More GraalPy-specific user documentation is available in docs/user. General documentation about polyglot programming and language embedding is available on the GraalVM website.

Community

The best way to get in touch with us is to join the #graalpy channel on GraalVM Slack or tweet us.

Contributing

This project welcomes contributions from the community. Before submitting a pull request, please review our contribution guide.

If you're thinking about contributing something to this repository, you will need to sign the Oracle Contributor Agreement for us to able to merge your work. Also take a look at the code of conduct for contributors.

Security

Consult the security guide for our responsible security vulnerability disclosure process.

License

This GraalVM implementation of Python is Copyright (c) 2017, 2024 Oracle and/or its affiliates and is made available to you under the terms the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/. This implementation is in part derived from and contains additional code from 3rd parties, the copyrights and licensing of which is detailed in the LICENSE and THIRD_PARTY_LICENSE files.