|
|
--- |
|
|
license: mit |
|
|
title: python_to_streamlit_convertor |
|
|
sdk: streamlit |
|
|
emoji: π |
|
|
colorFrom: green |
|
|
colorTo: gray |
|
|
sdk_version: 1.51.0 |
|
|
--- |
|
|
# Python β Streamlit Converter Pro |
|
|
|
|
|
A powerful, production-ready tool that converts Python scripts and Jupyter Notebooks into fully functional Streamlit applications. Handles large files, preserves comments and markdown, and provides multiple conversion strategies. |
|
|
|
|
|
## β¨ Features |
|
|
|
|
|
### Core Capabilities |
|
|
- **Multi-Format Support**: Convert `.py` files and `.ipynb` notebooks |
|
|
- **Large File Handling**: Efficiently processes files up to 5MB+ with optimized algorithms |
|
|
- **Comment Preservation**: All comments, docstrings, and inline documentation are preserved |
|
|
- **Markdown Support**: Notebook markdown cells are converted to commented Python code |
|
|
- **Batch Processing**: Upload ZIP archives to convert multiple files at once |
|
|
|
|
|
### Conversion Strategies |
|
|
|
|
|
1. **Hybrid Mode (Recommended)**: Combines AST parsing with regex patterns |
|
|
- Best balance of accuracy and performance |
|
|
- Handles complex code structures |
|
|
- Preserves formatting and comments |
|
|
|
|
|
2. **AST Mode (Precise)**: Pure abstract syntax tree transformation |
|
|
- Deep understanding of code structure |
|
|
- Best for complex transformations |
|
|
- Preserves all code semantics |
|
|
|
|
|
3. **Regex Mode (Fast)**: Pattern-based matching |
|
|
- Fastest for very large files |
|
|
- Good for simple conversions |
|
|
- Efficient memory usage |
|
|
|
|
|
4. **Auto Mode**: Automatically selects the best strategy based on file size |
|
|
|
|
|
### What Gets Converted? |
|
|
|
|
|
| Original Code | Streamlit Equivalent | |
|
|
|--------------|---------------------| |
|
|
| `print(x)` | `st.write(x)` | |
|
|
| `display(df)` | `st.dataframe(df)` | |
|
|
| `df.head()` / `df.tail()` | `st.dataframe(df.head())` | |
|
|
| `plt.show()` | `st.pyplot(plt.gcf())` | |
|
|
| `fig.show()` (Plotly) | `st.plotly_chart(fig)` | |
|
|
| Markdown cells | Commented markdown | |
|
|
| All comments | Preserved | |
|
|
|
|
|
## π Installation |
|
|
|
|
|
1. Clone or download this repository |
|
|
2. Install dependencies: |
|
|
|
|
|
```bash |
|
|
pip install -r Requirements.txt |
|
|
``` |
|
|
|
|
|
## π Usage |
|
|
|
|
|
### Running the Application |
|
|
|
|
|
```bash |
|
|
streamlit run app.py |
|
|
``` |
|
|
|
|
|
The application will open in your default web browser. |
|
|
|
|
|
### Basic Workflow |
|
|
|
|
|
1. **Upload Files**: Use the sidebar to upload Python files or Jupyter notebooks |
|
|
- Individual files: Upload one or more files directly |
|
|
- ZIP archive: Upload a ZIP containing multiple files |
|
|
|
|
|
2. **Configure Settings** (Optional): |
|
|
- Choose conversion strategy (Hybrid recommended) |
|
|
- Set large file threshold |
|
|
- Enable/disable main guard |
|
|
- Toggle comment preservation |
|
|
|
|
|
3. **Review & Download**: |
|
|
- View original and converted code side-by-side |
|
|
- Check conversion report for details |
|
|
- Download the converted Streamlit app |
|
|
|
|
|
### Advanced Settings |
|
|
|
|
|
- **Conversion Strategy**: Choose how the code is analyzed and converted |
|
|
- **Large File Threshold**: Files above this size (in KB) use optimized processing |
|
|
- **Main Guard**: Adds `if __name__ == '__main__':` wrapper for safer execution |
|
|
- **Preserve Comments**: Keep all comments and docstrings in the output |
|
|
|
|
|
## π― Use Cases |
|
|
|
|
|
- **Data Science Projects**: Convert Jupyter notebooks with visualizations to interactive Streamlit dashboards |
|
|
- **Script Migration**: Transform existing Python scripts into web applications |
|
|
- **Batch Conversion**: Process entire project folders at once |
|
|
- **Prototyping**: Quickly create Streamlit apps from existing code |
|
|
|
|
|
## π§ Technical Details |
|
|
|
|
|
### Architecture |
|
|
|
|
|
- **AST-Based Transformation**: Uses Python's `ast` module for structural analysis |
|
|
- **Regex Fallback**: Pattern matching for edge cases and large files |
|
|
- **Hybrid Approach**: Combines both methods for optimal results |
|
|
- **Error Recovery**: Graceful fallbacks when parsing fails |
|
|
|
|
|
### Performance |
|
|
|
|
|
- Handles files up to 5MB+ efficiently |
|
|
- Chunked processing for large files |
|
|
- Caching for repeated conversions |
|
|
- Memory-efficient algorithms |
|
|
|
|
|
### Limitations |
|
|
|
|
|
- Does not execute code (safe conversion only) |
|
|
- Complex interactive widgets (e.g., `ipywidgets`) require manual conversion |
|
|
- Some edge cases in very complex code may need manual adjustment |
|
|
- Manual review recommended before production deployment |
|
|
|
|
|
## π Example |
|
|
|
|
|
### Input (Jupyter Notebook Cell): |
|
|
```python |
|
|
import pandas as pd |
|
|
import matplotlib.pyplot as plt |
|
|
|
|
|
df = pd.read_csv('data.csv') |
|
|
print(f"Dataset has {len(df)} rows") |
|
|
display(df.head()) |
|
|
|
|
|
plt.figure(figsize=(10, 6)) |
|
|
plt.plot(df['x'], df['y']) |
|
|
plt.show() |
|
|
``` |
|
|
|
|
|
### Output (Streamlit App): |
|
|
```python |
|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
import matplotlib.pyplot as plt |
|
|
|
|
|
st.set_page_config( |
|
|
page_title='Converted App', |
|
|
layout='wide' |
|
|
) |
|
|
|
|
|
st.title(' Converted Streamlit App') |
|
|
|
|
|
df = pd.read_csv('data.csv') |
|
|
st.write(f"Dataset has {len(df)} rows") |
|
|
st.dataframe(df.head()) |
|
|
|
|
|
plt.figure(figsize=(10, 6)) |
|
|
plt.plot(df['x'], df['y']) |
|
|
st.pyplot(plt.gcf()) |
|
|
``` |
|
|
|
|
|
## π οΈ Development |
|
|
|
|
|
### Project Structure |
|
|
``` |
|
|
python_to_full_streamlit/ |
|
|
βββ app.py # Main Streamlit application |
|
|
βββ Requirements.txt # Python dependencies |
|
|
βββ README.md # This file |
|
|
``` |
|
|
|
|
|
### Key Components |
|
|
|
|
|
1. **HybridConverter**: Main conversion engine with multiple strategies |
|
|
2. **CommentPreservingTransformer**: AST transformer that preserves code structure |
|
|
3. **extract_code_from_notebook**: Enhanced notebook processing with markdown support |
|
|
4. **File Processing**: Cached, efficient file handling with error recovery |
|
|
|
|
|
## π€ Contributing |
|
|
|
|
|
This is a production-ready converter. Improvements welcome for: |
|
|
- Additional conversion patterns |
|
|
- Performance optimizations |
|
|
- Edge case handling |
|
|
- UI/UX enhancements |
|
|
|
|
|
## π License |
|
|
|
|
|
This project is provided as-is for converting Python code to Streamlit applications. |
|
|
|
|
|
## π‘ Tips |
|
|
|
|
|
- Use **Hybrid mode** for best results on most files |
|
|
- Enable **comment preservation** to maintain documentation |
|
|
- For very large files (>1MB), consider using **Regex mode** |
|
|
- Always review converted code before deployment |
|
|
- Test the generated Streamlit app with sample data |
|
|
|
|
|
## π Troubleshooting |
|
|
|
|
|
**Issue**: Conversion fails on a file |
|
|
- **Solution**: Try a different conversion mode (AST vs Regex) |
|
|
- Check if the file has syntax errors |
|
|
- Verify the file is valid Python/Jupyter format |
|
|
|
|
|
**Issue**: Comments are missing |
|
|
- **Solution**: Enable "Preserve Comments" in advanced settings |
|
|
- Use AST or Hybrid mode instead of Regex |
|
|
|
|
|
**Issue**: Large file processing is slow |
|
|
- **Solution**: Increase the large file threshold |
|
|
- Use Regex mode for very large files |
|
|
- Process files individually instead of in ZIP |
|
|
|
|
|
--- |
|
|
|
|
|
**Made with β€οΈ for the Streamlit community** |