Skip to main content

Use Marimo notebooks as your development environment.

Project description

🚀 python-modev

A development environment that uses Marimo notebooks as your primary development interface, inspired by nbdev. This tool allows you to write and organize your code in Marimo notebooks while maintaining a clean, exportable Python package structure.

📦 Installation

We recommend using UV for installation and package management as it provides better performance and reliability:

# Install UV if you haven't already
pip install uv

# Install python-modev
uv pip install python-modev

For library development, you can initialize a new project with UV:

uv init --lib

🚀 Quick Start

  1. Initialize a new project:
modev init
  1. Start your Marimo notebook:
marimo edit
  1. Export your code to Python files:
modev export

📁 Project Structure

After initialization, your project will have the following structure:

your-project/
├── modev.yaml        # Configuration file
├── nbs/              # Your Marimo notebooks
└── src/your-project  # Exported Python files

⚙️ Configuration

The modev.yaml file controls how your code is exported from notebooks to Python files. Here's an example configuration:

export_dir: src/modev
notebooks_dir: nbs

Configuration Options

  • source: Path to your Marimo notebook
  • destination: Where to export the Python files
  • export_type:
    • module: Export as a Python module (creates __init__.py)
    • script: Export as a standalone script

📝 Export Directives

python-modev uses special directives in your Marimo notebooks to control code export:

#| export Directive

Use this directive to mark cells that should be exported to Python files:

#| export
def my_function():
    """This function will be exported"""
    return "Hello, world!"
  • Place #| export at the beginning of any cell you want to export
  • The exported code will include an origin comment showing which notebook and cell it came from
  • All exported code from a notebook will be combined into a single Python file

#| default_exp Directive

Use this directive to specify the target filename for exported code:

#| default_exp my_module
  • Place this directive in any cell (usually at the top of your notebook)
  • The first #| default_exp directive found will determine the output filename
  • If no #| default_exp is found, the notebook's name will be used
  • The .py extension is optional (will be added automatically if missing)

Example Notebook Structure

Initial cell

#| default_exp my_module.py

Following cells

#| export
def public_function():
    """This will be included in __all__"""
    return "Public API"
#| export
def _private_function():
    """This won't be included in __all__"""
    return "Internal use only"

🛠️ Usage

Initializing a Project

modev init

This command:

  • Creates a basic project structure
  • Sets up a default modev.yaml
  • Initializes necessary directories

Exporting Code

modev export

This command:

  • Reads your Marimo notebooks
  • Extracts Python code marked with #| export
  • Exports to the specified destinations in modev.yaml
  • Automatically generates __all__ based on exported names (excluding those starting with _)

💡 Best Practices

  1. Notebook Organization:

    • Keep related code in the same notebook
    • Use clear cell markers to separate different components
    • Document your code using Marimo's markdown cells
  2. Export Configuration:

    • Group related functionality in the same destination
    • Use module exports for packages
    • Use script exports for standalone utilities
  3. Development Workflow:

    • Write and test code in Marimo notebooks
    • Export frequently to ensure your Python files stay in sync
    • Use version control to track changes in both notebooks and exported files

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

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

python_modev-0.1.3.tar.gz (24.5 kB view details)

Uploaded Source

Built Distribution

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

python_modev-0.1.3-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file python_modev-0.1.3.tar.gz.

File metadata

  • Download URL: python_modev-0.1.3.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.8

File hashes

Hashes for python_modev-0.1.3.tar.gz
Algorithm Hash digest
SHA256 eec714b96862c8cb1fee6909616e1f7151970590e5203ae5fd4ddce084c80cd8
MD5 a384a94148b0974800d5216663f1750f
BLAKE2b-256 bda74e10f4640fd7a0ee7eeb247c13a449c1f4dd11922880e64883227d2c1ba3

See more details on using hashes here.

File details

Details for the file python_modev-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for python_modev-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 06cf958b073dd476b327a484ed49be160e36d94d0a37039b90dd1b4ac66cece4
MD5 820da5102a9833f54abd1b60b4b1f3d6
BLAKE2b-256 90aa5c335f7bddf04c77f102ace84acf9f02bdeaecbdfff0163e472b0ce6650a

See more details on using hashes here.

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