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.
Import validation
Scans your code for external imports and blocks the build if any module is missing from exports.
pip does the rest
No custom registry. Publish to PyPI, install with pip. Version resolution, lockfiles, uninstall - all built in.
Jython compatible
Output is pure Python, no C extensions. Works with Ignition's Jython 2.7 runtime.
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": {
      "version": "0.1.0",
      "source": "global",
      "exports": ["foomes"]
    }
  }
}