Ignition Package Maker - convert script-python modules into publishable Python packages.

jython ignition ipm pip install ipm

# Install

$ pip install ignition-package-maker
terminal
# Initialize
$ ipm init
Discovered modules: foomes
Created ipm.json

# Build your package
$ ipm build
Building foomes@0.1.0
foomes/ (20 modules)
Built foomes@0.1.0

# Publish with standard Python tooling
$ cd ipm/foomes && python -m build
$ twine upload dist/*

# Consumers install with pip
$ pip install --target ./site-packages foomes

# How it works

ipm converts Ignition's code.py convention into standard Python modules.

Ignition project script-python/
  foomes/
    workorders/
      code.py
      resource.json
    alarms/
      code.py
      resource.json
    reporting/
      code.py
      resource.json
Python package src/
  foomes/
    __init__.py
    workorders.py
    alarms.py
    reporting.py
pyproject.toml

# Getting started

A minimal setup with Docker Compose to develop and test Ignition packages locally.

# docker-compose.yaml

services:
  ignition:
    image: inductiveautomation/ignition:latest
    ports:
      - "8088:8088"
    environment:
      ACCEPT_IGNITION_EULA: "Y"
      IGNITION_EDITION: standard
      GATEWAY_ADMIN_USERNAME: admin
      GATEWAY_ADMIN_PASSWORD: password
    volumes:
      - ./ignition:/usr/local/bin/ignition/data/projects
      - ./site-packages:/usr/local/bin/ignition/user-lib/pylib/site-packages
      - ignition-data:/usr/local/bin/ignition/data

volumes:
  ignition-data:
Set up your project
Create the directory structure and start the gateway.
$ mkdir -p ignition site-packages
$ docker compose up -d
Install packages
Use pip to install ipm packages into your site-packages directory.
$ pip install --target ./site-packages foomes
Freeze requirements
Lock your installed packages so others can reproduce the environment.
$ pip freeze --path ./site-packages > requirements.txt

# Reinstall from lockfile
$ pip install --target ./site-packages -r requirements.txt
Publish your own packages
Initialize ipm in your Ignition project and build a distributable package.
$ pip install ipm
$ ipm init
$ ipm build
$ cd ipm/foomes && python -m build && twine upload dist/*

# Features

Zero config discovery
Auto-detects Ignition projects and script-python modules. Just run ipm init.
Multi-package repos
Define multiple packages from one repo. Build all at once or target a specific one.
Simple Config
Configuration is a basic map between your ignition scripts and packages.
pip does the rest
No custom registry. Publish to PyPI, install with pip. Version resolution, lockfiles, uninstall - all built in.
Ignition First
Include system.* and any other Ignition native functionality.
Non-intrusive
Your Ignition project stays unchanged. ipm only reads your scripts and outputs a separate package.

# Configuration

// ipm.json
{
  "projects": {
    "global": "ignition/global/ignition/script-python"
  },
  "packages": {
    "foomes": {
      "source": "global",
      "exports": ["foomes"]
    }
  }
}

Version, description, dependencies, and license live in pyproject.toml (created on first build).