A bridge between the Java Runtime Environment and Python.
Project description
Rubicon-Java
Rubicon-Java is a bridge between the Java Runtime Environment and Python. It enables you to:
Instantiate objects defined in Java,
Invoke static and instance methods on objects defined in Java,
Access and modify static and instance fields on objects defined in Java, and
Write and use Python implementations of interfaces defined in Java.
Quickstart
Rubicon-Java consists of three components:
A Python library,
A JNI library, and
A Java JAR file.
A Makefile has been provided to compile the JNI and JAR components. Type:
$ make
to compile them. The compiled output will be placed in the build directory.
To use Rubicon-Java, you’ll need to ensure:
rubicon.jar is in the classpath when you start your Java VM.
The Rubicon library file is somewhere that it will be found by dynamic library discovery. This means:
Under OS X, put the directory containing librubicon.dylib is in your DYLD_LIBRARY_PATH
Under Linux, put the directory containing librubicon.so is in your LD_LIBRARY_PATH
Under Windows…. something :-)
The rubicon Python module is somewhere that can be added to a PYTHONPATH. You can install rubicon using:
$ pip install rubicon-java
If you do this, you’ll need to reference your system Python install when setting your PYTHONPATH.
The Rubicon bridge starts on the Java side. Import the Python object:
import org.beeware.rubicon.Python;
Then start the Python interpreter, and run a Python file:
# Initialize the Python VM String pythonHome = "/path/to/python"; String pythonPath = "/path/to/dir1:/path/to/dir2"; if (Python.start(pythonHome, pythonPath, null) != 0) { System.out.println("Error initializing Python VM."); } # Start a Python module if (Python.run("path.of.module") != 0) { System.out.println("Error running Python script."); } # Shut down the Python VM. Python.stop();
The PYTHONPATH you specify must enable access to the rubicon Python module.
In your Python script, you can then reference Java objects:
>>> from rubicon.java import JavaClass # Wrap a Java class >>> URL = JavaClass("java/net/URL") # Then instantiate the Java class, using the API # that is exposed in Java. >>> url = URL("https://beeware.org") # You can then call methods on the Java object as if it # were a Python object. >>> print(url.getHost()) beeware.org
It’s also possible to provide implementations of Java Interfaces in Python. For example, lets say you want to create a Swing Button, and you want to respond to button clicks:
>>> from rubicon.java import JavaClass, JavaInterface # Wrap the Java interface >>> ActionListener = JavaInterface('java/awt/event/ActionListener') # Define your own implementation >>> class MyActionListener(ActionListener): ... def actionPerformed(self, event): ... print("Button Pressed") # Instantiate an instance of the listener >>> listener = MyActionListener() # Create a button, and set the listener >>> Button = JavaClass('javax/swing/JButton') >>> button = Button('Push it') >>> button.setActionListener(listener)
Of course, this sample code won’t work unless it’s in the context of a larger application starting a Swing GUI and so on.
Testing
To run the Rubicon test suite:
Ensure that java is on your $PATH, or set the JAVA_HOME environment variable to point to a directory of a Java Development Kit (JDK).
Create a Python 3 virtual environment, and ensure that pip & setuptools are up to date:
$ python3 -m venv venv $ source venv/bin/activate (venv) $ python -m pip install --upgrade pip (venv) $ python -m pip install --upgrade setuptools
Install tox:
(venv) $ python -m pip install tox
Run the test suite. The following should work properly on both macOS and Linux:
(venv) $ tox -e py
This will compile the Rubicon library, compile the Java test classes, and run the Python test suite from within the Java environment.
Documentation
Full documentation for Rubicon can be found on Read The Docs.
Community
Rubicon is part of the BeeWare suite. You can talk to the community through:
The beeware/general channel on Gitter.
We foster a welcoming and respectful community as described in our BeeWare Community Code of Conduct.
Contributing
If you experience problems with this backend, log them on GitHub. If you want to contribute code, please fork the code and submit a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file rubicon-java-0.2.6.tar.gz
.
File metadata
- Download URL: rubicon-java-0.2.6.tar.gz
- Upload date:
- Size: 83.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ce7a7c2b80ef47a1b9ee0e6a41efced8973b0ec87e4dd62c2312f8e014ae007 |
|
MD5 | 16a0364d54c1555801f855ec7e0cc54b |
|
BLAKE2b-256 | 2c14a02a8bdb80e2a7e104cf95fd699d97e781cb9d2e0be72658e93a320557f2 |
File details
Details for the file rubicon_java-0.2.6-py3-none-any.whl
.
File metadata
- Download URL: rubicon_java-0.2.6-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0162b054184b8cf7a1016934df730bad335d9c74c322a01eafd30c742f350d6 |
|
MD5 | 8e14b286e012d463904f795c3af0e669 |
|
BLAKE2b-256 | 48d92f153e008ba79e0f380ea6a37f6831e84259562dc3ff3aefb686985d362e |