ipm
Ignition Package Maker - convert script-python modules into publishable Python packages.
jython
ignition
ipm
pip install ipm
# Install
$
pip install ignition-package-maker
$ ipm init
Discovered modules: foomes
Created ipm.json
$ ipm build
Building foomes@0.1.0
foomes/ (20 modules)
Built foomes@0.1.0
$ cd ipm/foomes && python -m build
$ twine upload dist/*
$ 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.
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
$ 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
{
"projects": {
"global": "ignition/global/ignition/script-python"
},
"packages": {
"foomes": {
"version": "0.1.0",
"source": "global",
"exports": ["foomes"]
}
}
}