Skip to content

Using Python on Inti

Use this guide after logging into Inti when you need an interactive EOVSA Python session or want to run a script. Inti provides isolated runtimes for legacy Python 2 software and the current Python 3.8 data-processing stack.

Temporary runtime environments

These commands start short-lived containers; they do not replace Inti's host Python installation. Files saved in the approved mounted directories remain after the command exits. Packages or files created only inside a container do not.

Start here

At the Inti shell prompt, load the standard command shortcuts:

eovsaenv

This prints a short command guide. Use eovsahelp to show the guide again without reloading the setup.

If eovsaenv is not defined in an existing session, load the setup once for your shell:

For Bash:

source ~/.setenv_eovsa_docker

For tcsh or csh:

source ~/.setenv_eovsa_docker.csh

A new login shell normally loads the appropriate setup automatically.

Choose a runtime

Command Use it for
py38 [args] Current EOVSA Python 3.8 processing work. Start here unless the software specifically requires Python 2.
ipy38 Interactive Python 3.8 with IPython and plotting support.
py2 [args] Legacy Python 2.7 scripts and modules.
ipy2 Interactive Python 2.7 with IPython and plotting support.
lwa [args] Python 3.8 with the approved OVRO-LWA data mounts.
eovsaenv Reload the shortcuts for the current shell and print the quick guide.
eovsahelp Print the quick guide without reloading anything.

Examples

# Start an interpreter or IPython session
eovsaenv
py38
ipy38

# Inspect a package version
py38 -c 'import numpy; print(numpy.__version__)'

# Run a legacy script
py2 /common/python/current/goes.py

# Run a current Python module
py38 -m eovsapy.daily_xsp

Use Ctrl-D or exit() to leave Python or IPython. The temporary container is then removed. eovsaenv and eovsahelp are host-shell commands, so run them at the Bash, tcsh, or csh prompt rather than at an In [N]: IPython prompt.

Plotting over SSH

JupyterLab through an SSH tunnel

JupyterLab is the recommended option for interactive Python 3.8 plotting. The plot is rendered in your local browser, so it is usually more responsive than an X11 window.

On your local computer, open an SSH tunnel and leave it running:

ssh -N -L 8888:127.0.0.1:8888 inti

In a second Inti session, start JupyterLab:

cd /scratch/eovsa/containers/eovsa-runtimes
docker compose --profile manual run --rm py38 \
  jupyter lab --no-browser --ip=127.0.0.1 --port=8888 \
  --ServerApp.root_dir=/scratch/eovsa/workdir

Open the http://127.0.0.1:8888/lab?... URL printed by Jupyter. For an interactive Matplotlib canvas, put this at the top of the notebook:

%matplotlib widget

Keep the server bound to 127.0.0.1, keep token authentication enabled, and connect only through the SSH tunnel. Stop the server with Ctrl-C.

Native plot windows with X11

Start XQuartz on the Mac, connect with X11 forwarding, and verify that the remote shell has a display:

ssh -X inti
echo "$DISPLAY"

A value such as localhost:15.0 means forwarding is active. You can then use ipy2 or ipy38 and open a Matplotlib window with show():

plot([1, 2], [3, 4])
show()

Do not use xhost +. If macOS or XQuartz rejects an untrusted ssh -X connection, reconnect to this trusted host with ssh -Y.

Save a plot without a display

When DISPLAY is empty, save the figure to a mounted host path:

plot([1, 2], [3, 4])
savefig("/scratch/eovsa/workdir/example.png", dpi=150, bbox_inches="tight")

The saved file remains available on Inti after IPython exits.

Deployment, image maintenance, validation, and rollback procedures remain in the internal Inti runtime runbook for authorized maintainers.

Public user guide last reviewed: 2026-09-03.