Installation — PythonHere
Contents
Installation#
PythonHere has two parts that are installed separately:
Remote side — PythonHere app: a Kivy application that runs Python code and shows the GUI. This is usually installed on Android, but can also be built from source.
Local side — Jupyter client: a local Jupyter Notebook environment where you use the
%theremagic command to execute code in the remote PythonHere app.
Most users need both parts:
install the PythonHere app on the remote device;
start Jupyter locally on the computer.
Remote side#
Install ready-to-use Android APKs#
Ready-to-use PythonHere APKs are available in the GitHub Releases section.
To receive updates from GitHub Releases, you can install PythonHere with Obtainium.
To add PythonHere to Obtainium from another device, scan this QR code on your Android device:

Android APK verification#
Starting with version 0.2.0, PythonHere Android APKs are distributed through GitHub Releases as the central distribution channel and are signed with the PythonHere Android signing certificate.
PythonHere uses several release verification measures to help users confirm that a downloaded APK is authentic:
APKs are built by this repository’s GitHub Actions workflow.
Build provenance is published as GitHub artifact attestations.
Published releases are protected by GitHub immutable releases.
APKs are signed with the PythonHere Android signing certificate.
The following checks are optional, but can be used to verify a downloaded APK before installing it.
Download the APK#
Download the APK from the PythonHere Releases page:
In the commands below, replace <version> with the release tag you downloaded, for example 0.2.0.
Verify GitHub Actions provenance#
Use the GitHub CLI to verify that the downloaded APK was built by this repository’s GitHub Actions workflow:
gh attestation verify pythonhere-*.apk -R b3b/pythonhere
This verifies the APK’s build provenance and confirms that the artifact is associated with the b3b/pythonhere repository.
Verify the downloaded release asset#
Verify that the downloaded APK matches the asset published in the GitHub release:
gh release verify-asset <version> pythonhere-*.apk -R b3b/pythonhere
This confirms that the local APK file matches the release asset recorded by GitHub.
Verify the immutable GitHub release#
Verify that GitHub recognizes the release as immutable:
gh release verify <version> -R b3b/pythonhere
This confirms that the published release is protected by GitHub immutable releases, so its release assets and associated Git tag cannot be changed after publication.
Verify the Android signing certificate#
Use Android SDK build-tools apksigner to verify the APK signature and print the signing certificate:
apksigner verify --verbose --print-certs pythonhere-*.apk
The printed certificate SHA-256 digest should match the expected PythonHere Android signing certificate:
3b725f0ca2485c56fac72248f4d42bfb5531e076d03b45c766fafca16de6a451
Build Android app from source#
To build the Android app with Buildozer, run in the repository directory:
Local side#
Run Jupyter with Docker#
The Docker image is based on Jupyter Docker Stacks and includes installed PythonHere with usage examples.
Example command to start the Docker container:
mkdir -p work && docker run \ --rm \ -p 8888:8888 \ -v "$(pwd)/work":/home/jovyan/work \ herethere/pythonhere:latest
The command exposes the Jupyter Notebook server on host port 8888.
Jupyter logs appear in the terminal and include a URL to the notebook server, for example:
http://127.0.0.1:8888/?token=...
Open this URL in a browser to load the Jupyter Notebook dashboard page.
Files from the directory work inside the container will be available in the host directory with the same name: work.
Run Jupyter with Docker Compose#
To run with Docker Compose, copy the template configuration and start the service from the repository directory:
cp docker-compose.yml.tmpl docker-compose.yml docker-compose up
Run Jupyter without Docker#
Install PythonHere from PyPI and start Jupyter Notebook:
pip install pythonhere jupyter jupyter notebook