Skip to main content

Execute Python .py files on remote Jupyter servers

Project description

pyrun-jupyter

Execute Python .py files on remote Jupyter servers.

PyPI version Python 3.8+ License: MIT GitHub

Installation

pip install pyrun-jupyter

Quick Start

from py2jupyter import JupyterRunner

# Connect to your Jupyter server
runner = JupyterRunner("http://localhost:8888", token="your_token")

# Run a .py file on the remote server
result = runner.run_file("script.py")
print(result.stdout)

# Or run code directly
result = runner.run("print('Hello from Jupyter!')")
print(result.stdout)

Features

  • 🐍 Execute standard .py files on remote Jupyter kernels
  • 📤 Pass parameters to your scripts
  • 📥 Capture stdout, stderr, and rich outputs
  • 🔄 Kernel management (start, stop, restart)
  • 🔌 Connect to existing kernels
  • ⚡ Context manager support for automatic cleanup

Usage Examples

Basic Usage

from py2jupyter import JupyterRunner

runner = JupyterRunner("http://jupyter-server:8888", token="xxx")

# Execute code
result = runner.run("x = 42; print(f'The answer is {x}')")
print(result.stdout)  # The answer is 42

# Clean up
runner.stop_kernel()

Using Context Manager (Recommended)

from py2jupyter import JupyterRunner

with JupyterRunner("http://localhost:8888", token="xxx") as runner:
    result = runner.run_file("my_script.py")
    print(result.stdout)
# Kernel automatically stopped

Passing Parameters to Scripts

from py2jupyter import JupyterRunner

with JupyterRunner("http://localhost:8888", token="xxx") as runner:
    # Parameters are injected as variables in your script
    result = runner.run_file(
        "train_model.py",
        params={
            "learning_rate": 0.001,
            "epochs": 100,
            "batch_size": 32,
        }
    )
    print(result.stdout)

Your train_model.py can use these variables directly:

# train_model.py
print(f"Training with lr={learning_rate}, epochs={epochs}")
# ... your training code

Handling Errors

from py2jupyter import JupyterRunner, ExecutionError

runner = JupyterRunner("http://localhost:8888", token="xxx")

result = runner.run("1/0")
if result.has_error:
    print(f"Error: {result.error_name}: {result.error}")
    # Error: ZeroDivisionError: division by zero

Connecting to Existing Kernel

runner = JupyterRunner("http://localhost:8888", token="xxx", auto_start_kernel=False)

# List available kernels
kernels = runner.list_kernels()
print(kernels)

# Connect to a specific kernel
runner.connect_to_kernel("existing-kernel-id")
result = runner.run("print('Using existing kernel!')")

Managing Kernels

runner = JupyterRunner("http://localhost:8888", token="xxx")

# Start a specific kernel type
runner.start_kernel("python3")

# Restart kernel (clears state)
runner.restart_kernel()

# Stop kernel when done
runner.stop_kernel()

ExecutionResult

The run() and run_file() methods return an ExecutionResult object:

Attribute Type Description
stdout str Standard output
stderr str Standard error
success bool Whether execution succeeded
error str Error message (if failed)
error_name str Exception type (e.g., 'ValueError')
error_traceback list Full traceback
data dict Rich output (text/plain, text/html, etc.)
execution_count int Jupyter cell execution count

Configuration

Parameter Default Description
url (required) Jupyter server URL
token None Authentication token
kernel_name "python3" Kernel specification to use
auto_start_kernel True Start kernel automatically on first run

Getting Your Jupyter Token

From Jupyter Notebook/Lab

When you start Jupyter, it displays a URL with the token:

http://localhost:8888/?token=abc123...

Generate a permanent token

jupyter server --generate-config
# Edit ~/.jupyter/jupyter_server_config.py
# Set: c.ServerApp.token = 'your-secret-token'

Requirements

  • Python >= 3.8
  • A running Jupyter server (Notebook, Lab, or Hub)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyrun_jupyter-0.1.0.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyrun_jupyter-0.1.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file pyrun_jupyter-0.1.0.tar.gz.

File metadata

  • Download URL: pyrun_jupyter-0.1.0.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyrun_jupyter-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fa0a4ada9e622de401536f2173fd3646968e9eff9ad929b9a851a175fd786a66
MD5 36dcc5912e7d6c9800b43de081584cac
BLAKE2b-256 b7354045c1cfbfc0f0b4fd0cf3c4cd8bfd73ef743677cdda82d8071bf690d5a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrun_jupyter-0.1.0.tar.gz:

Publisher: publish.yml on petitoff/pyrun-jupyter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrun_jupyter-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyrun_jupyter-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyrun_jupyter-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 520a186dd7d77b3c4f98a68bf46b3f1ba068ca199872226b7dc4957c499f13c8
MD5 c9cc1e0bf4fbddf1a5fbc8140fa5fa82
BLAKE2b-256 10b51c929262c84ce6408d3932ca90565a6c5ac9ab2952e4c135592484ca3143

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrun_jupyter-0.1.0-py3-none-any.whl:

Publisher: publish.yml on petitoff/pyrun-jupyter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page