Skip to main content

Exxec

PyPI License Package status Monthly downloads Distribution format Wheel availability Python version Implementation Releases Github Contributors Github Discussions Github Forks Github Issues Github Issues Github Watchers Github Stars Github Repository size Github last commit Github release date Github language count Github commits this month Package status PyUp

Read the documentation!

Basic Usage

Use the get_environment() function to create execution environments:

from exxec import get_environment

# Local execution (same process)
env = get_environment("local")

# Subprocess execution (separate process when executing python code)
env = get_environment("local", isolated=True)

# Docker execution (containerized)
env = get_environment("docker")

# Execute code
async with env:
    result = await env.execute("""
    async def main():
        return "Hello from execution environment!"
    """)
    print(result.result)  # "Hello from execution environment!"

Available Providers

Local Provider

Executes code in the same Python process. Fastest option but offers no isolation.

env = get_environment("local", timeout=30.0)

Parameters:

  • timeout (float): Execution timeout in seconds (default: 30.0)
  • isolated (bool): Whether to execute code in a separate process (default: False)
  • language (Language): Programming language (default: "python")

Docker Provider

Executes code in Docker containers for strong isolation and reproducible environments.

env = get_environment(
    "docker",
    image="python:3.13-slim",
    timeout=60.0,
    language="python"
)

Parameters:

  • lifespan_handler: Tool server context manager (optional)
  • image (str): Docker image to use (default: "python:3.13-slim")
  • timeout (float): Execution timeout in seconds (default: 60.0)
  • language (Language): Programming language (default: "python")

Daytona Provider

Executes code in remote Daytona sandboxes for cloud-based development environments.

env = get_environment(
    "daytona",
    api_url="https://api.daytona.io",
    api_key="your-api-key",
    timeout=300.0,
    keep_alive=False
)

Parameters:

  • api_url (str): Daytona API URL (optional, uses env vars if not provided)
  • api_key (str): API key for authentication (optional)
  • target (str): Target configuration (optional)
  • image (str): Container image (default: "python:3.13-slim")
  • timeout (float): Execution timeout in seconds (default: 300.0)
  • keep_alive (bool): Keep sandbox running after execution (default: False)

E2B Provider

Executes code in E2B sandboxes for secure, ephemeral execution environments.

env = get_environment(
    "e2b",
    template="python",
    timeout=300.0,
    keep_alive=False,
    language="python"
)

Parameters:

  • template (str): E2B template to use (optional)
  • timeout (float): Execution timeout in seconds (default: 300.0)
  • keep_alive (bool): Keep sandbox running after execution (default: False)
  • language (Language): Programming language (default: "python")

Beam Provider

Executes code in Beam cloud sandboxes for scalable, serverless execution environments.

env = get_environment(
    "beam",
    cpu=1.0,
    memory=128,
    keep_warm_seconds=600,
    timeout=300.0,
    language="python"
)

Parameters:

  • cpu (float | str): CPU cores allocated to the container (default: 1.0)
  • memory (int | str): Memory allocated to the container in MiB (default: 128)
  • keep_warm_seconds (int): Seconds to keep sandbox alive, -1 for no timeout (default: 600)
  • timeout (float): Execution timeout in seconds (default: 300.0)
  • language (Language): Programming language (default: "python")

MCP Provider

Executes Python code with Model Context Protocol support for AI integrations.

env = get_environment(
    "mcp",
    dependencies=["requests", "numpy"],
    allow_networking=True,
    timeout=30.0
)

Parameters:

  • dependencies (list[str]): Python packages to install (optional)
  • allow_networking (bool): Allow network access (default: True)
  • timeout (float): Execution timeout in seconds (default: 30.0)

Code Execution Patterns

All providers support two execution patterns:

1. Main Function Pattern

code = """
async def main():
    # Your code here
    return "result"
"""

2. Result Variable Pattern

code = """
import math
_result = math.pi * 2
"""

Error Handling

Execution results include comprehensive error information:

async with env:
    result = await env.execute(code)
    if result.success:
        print(f"Result: {result.result}")
        print(f"Duration: {result.duration:.3f}s")
    else:
        print(f"Error: {result.error}")
        print(f"Error Type: {result.error_type}")

Multi-Language Support

Some providers support multiple programming languages:

# JavaScript execution
env = get_environment("subprocess", language="javascript", executable="node")

# TypeScript execution
env = get_environment("docker", language="typescript", image="node:18")

Advanced Usage

Context Managers

All environments are async context managers for proper resource cleanup:

async with get_environment("docker") as env:
    result1 = await env.execute(code1)
    result2 = await env.execute(code2)  # Reuses same container
# Container automatically cleaned up

Custom Configurations

Each provider supports environment-specific customization:

# Docker with custom image and networking
env = get_environment(
    "docker",
    image="tensorflow/tensorflow:latest-py3",
    timeout=600.0
)

# Subprocess with specific Python version
env = get_environment(
    "subprocess",
    executable="/usr/bin/python3.11",
    timeout=120.0
)

Streaming Output

Some providers support streaming output line by line, useful for long-running processes:

from exxec import get_environment

# Stream output from subprocess execution
env = get_environment("subprocess")

async with env:
    async for line in env.execute_stream("""
    import time
    for i in range(5):
        print(f"Processing step {i+1}...")
        time.sleep(1)
    print("Done!")
    """):
        print(f"Live output: {line}")

# Also works with Docker execution
env = get_environment("docker")
async with env:
    async for line in env.execute_stream(code):
        # Process each line as it's produced
        if "ERROR" in line:
            print(f"⚠️  {line}")
        else:
            print(f"✓ {line}")

Supported providers: docker, local, beam, e2b, modal, vercel, ssh, daytona

Metadata

Release files for exxec 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for exxec 0.4.1
File Size Uploaded
exxec-0.4.1.tar.gz 94.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for exxec 0.4.1
File Interpreter ABI Platform
exxec-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 228.4 kB

Release files / exxec-0.4.1.tar.gz

Download URL exxec-0.4.1.tar.gz
Size 94.4 kB
Tags Source
SHA-256 checksum
How to use checksums
12abc6324d421bdecf337193b324230b241eaab8a3d0e477e0e077315bb4264f
BLAKE2b-256 checksum
How to use checksums
a2e34704f37bcfc30c07baf401254340ac48be6be80c439eff039813d6dc227e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / exxec-0.4.1-py3-none-any.whl

Download URL exxec-0.4.1-py3-none-any.whl
Size 134.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
623215b41a63da4ef77e4b03c5a07626abae602ebd0657740002e79748598984
BLAKE2b-256 checksum
How to use checksums
d334c66b5a28616e17ded711fee9d596bda9f5cece41001973a0d1319a61c333
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page