# Python Shell Fallback

> Fallback to shell execution when sandbox fails for library-dependent Python code Use when this capability is needed.

- Skill: `tomevault-io/python-shell-fallback` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/python-shell-fallback`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/python-shell-fallback/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/python-shell-fallback

---


# Python Shell Fallback

When `execute_code_sandbox` fails for Python code that depends on external libraries, use `run_shell` with a heredoc Python script as a reliable fallback. The shell environment typically has better access to installed packages and system configuration than the sandbox.

## When to Use This Pattern

Apply this skill when:
- `execute_code_sandbox` returns errors related to missing libraries (e.g., `ModuleNotFoundError`)
- The code requires packages that may not be installed in the sandbox environment
- You need PDF generation, data visualization, or other library-heavy operations
- Previous sandbox execution attempts have failed with import errors

## How to Implement

### Step 1: Identify the Failure

Check if the sandbox error indicates a library/dependency issue:
- `ModuleNotFoundError: No module named 'xxx'`
- `ImportError: cannot import name 'xxx'`
- Similar package-related errors

### Step 2: Convert to Shell Execution

Rewrite the code execution using `run_shell` with a heredoc:

```bash
python3 << 'EOF'
# Your Python code here
import library_name
# ... rest of code
EOF
```

### Step 3: Execute via run_shell

Call `run_shell` with the heredoc Python script:

```
command: python3 << 'EOF'
import reportlab
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

# Your library-dependent code here
c = canvas.Canvas("output.pdf", pagesize=letter)
c.drawString(100, 750, "Hello World")
c.save()
EOF
```

## Example: PDF Generation Fallback

**Sandbox attempt (fails):**
```python
# execute_code_sandbox call fails with:
# ModuleNotFoundError: No module named 'reportlab'
```

**Shell fallback (works):**
```bash
python3 << 'EOF'
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

c = canvas.Canvas("legal_memo.pdf", pagesize=letter)
c.setTitle("Legal Memorandum")
c.drawString(100, 750, "CONFIDENTIAL LEGAL MEMORANDUM")
c.save()
print("PDF created successfully")
EOF
```

## Best Practices

1. **Use quoted heredoc (`<< 'EOF'`)** - Prevents variable expansion, keeping Python code intact
2. **Verify output** - Check stdout/stderr from `run_shell` to confirm success
3. **Handle file paths** - Ensure output files are written to accessible directories
4. **Test incrementally** - For complex scripts, test in smaller chunks first
5. **Include error handling** - Add try/except blocks to capture issues gracefully

## Alternative: Inline Python Command

For simple one-liners or short scripts:

```bash
python3 -c "import reportlab; print(reportlab.__version__)"
```

## Troubleshooting

If shell execution also fails:
- Check if Python3 is available: `which python3`
- Verify package installation: `pip3 list | grep package_name`
- Try `python` instead of `python3` (some systems differ)
- Consider installing the package: `pip3 install package_name`

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/HKUDS) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-16 -->

