


<a href="https://github.com/speechpro/inex-launcher/stargazers"><img src="https://img.shields.io/github/stars/speechpro/inex-launcher" alt="Stars Badge"/></a>
<a href="https://github.com/speechpro/inex-launcher/network/members"><img src="https://img.shields.io/github/forks/speechpro/inex-launcher" alt="Forks Badge"/></a>
<a href="https://github.com/speechpro/inex-launcher/pulls"><img src="https://img.shields.io/github/issues-pr/speechpro/inex-launcher" alt="Pull Requests Badge"/></a>
<a href="https://github.com/speechpro/inex-launcher/issues"><img src="https://img.shields.io/github/issues/speechpro/inex-launcher" alt="Issues Badge"/></a>
<a href="https://github.com/speechpro/inex-launcher/graphs/contributors"><img alt="GitHub contributors" src="https://img.shields.io/github/contributors/speechpro/inex-launcher?color=2b9348"></a>
# InEx Launcher
## Lightweight highly configurable Python launcher based on microkernel architecture
### Installation
```bash
pip install -U inex-launcher
```
### Single-file configuration
`inex-launcher` lets you describe an entire experiment in a single YAML file. The `plugins` list defines the initialization order of handlers. For each handler you only need to provide the module path and its options. The `execute` section describes the final method that will be called.
```yaml
plugins:
- loader
- model
- trainer
loader:
module: myproject.data/Loader
options:
path: data/train.csv
model:
module: myproject.nn/Model
options:
hidden: 128
trainer:
module: myproject.training/Trainer
imports:
model: plugins.model
data: plugins.loader
options:
epochs: 10
execute:
method: myproject.training/run
imports:
trainer: plugins.trainer
```
Run this configuration with:
```bash
inex config.yaml
```
You can fine-tune the experiment by merging it with another file using `--merge` and overriding specific values with `--update`:
```bash
inex config.yaml -m experiment.yaml -u trainer.epochs=20 model.hidden=64
```
This approach lets you modify parameters or even replace handlers with just a few lines of YAML—no need to edit high‑level Python files.
Key benefits of this approach:
- **High modularity** – modules can be swapped directly in the configuration thanks to the plugin-based structure.
- **Clean structure** – a clear sequence of `plugins` followed by a single `execute` block keeps the file readable.
- **Flexibility** – YAML allows complex nested structures, so even advanced scenarios fit in one file.
Raw data
{
"_id": null,
"home_page": "https://github.com/speechpro/inex-launcher",
"name": "inex-launcher",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "speechpro inex launcher inex-launcher command-line configuration yaml",
"author": "Yuri Khokhlov",
"author_email": "khokhlov@speechpro.com",
"download_url": "https://files.pythonhosted.org/packages/6b/21/a3dd7aec63357174d33a0054adfcd62e1c705f4180545a1ecde71e608200/inex-launcher-3.1.1.tar.gz",
"platform": null,
"description": "\n\n\n\n\n<a href=\"https://github.com/speechpro/inex-launcher/stargazers\"><img src=\"https://img.shields.io/github/stars/speechpro/inex-launcher\" alt=\"Stars Badge\"/></a>\n<a href=\"https://github.com/speechpro/inex-launcher/network/members\"><img src=\"https://img.shields.io/github/forks/speechpro/inex-launcher\" alt=\"Forks Badge\"/></a>\n<a href=\"https://github.com/speechpro/inex-launcher/pulls\"><img src=\"https://img.shields.io/github/issues-pr/speechpro/inex-launcher\" alt=\"Pull Requests Badge\"/></a>\n<a href=\"https://github.com/speechpro/inex-launcher/issues\"><img src=\"https://img.shields.io/github/issues/speechpro/inex-launcher\" alt=\"Issues Badge\"/></a>\n<a href=\"https://github.com/speechpro/inex-launcher/graphs/contributors\"><img alt=\"GitHub contributors\" src=\"https://img.shields.io/github/contributors/speechpro/inex-launcher?color=2b9348\"></a>\n\n# InEx Launcher\n\n## Lightweight highly configurable Python launcher based on microkernel architecture\n\n### Installation\n\n```bash\npip install -U inex-launcher\n```\n\n### Single-file configuration\n\n`inex-launcher` lets you describe an entire experiment in a single YAML file. The `plugins` list defines the initialization order of handlers. For each handler you only need to provide the module path and its options. The `execute` section describes the final method that will be called.\n\n```yaml\nplugins:\n - loader\n - model\n - trainer\n\nloader:\n module: myproject.data/Loader\n options:\n path: data/train.csv\n\nmodel:\n module: myproject.nn/Model\n options:\n hidden: 128\n\ntrainer:\n module: myproject.training/Trainer\n imports:\n model: plugins.model\n data: plugins.loader\n options:\n epochs: 10\n\nexecute:\n method: myproject.training/run\n imports:\n trainer: plugins.trainer\n```\n\nRun this configuration with:\n\n```bash\ninex config.yaml\n```\n\nYou can fine-tune the experiment by merging it with another file using `--merge` and overriding specific values with `--update`:\n\n```bash\ninex config.yaml -m experiment.yaml -u trainer.epochs=20 model.hidden=64\n```\n\nThis approach lets you modify parameters or even replace handlers with just a few lines of YAML\u2014no need to edit high\u2011level Python files.\n\nKey benefits of this approach:\n\n- **High modularity** \u2013 modules can be swapped directly in the configuration thanks to the plugin-based structure.\n- **Clean structure** \u2013 a clear sequence of `plugins` followed by a single `execute` block keeps the file readable.\n- **Flexibility** \u2013 YAML allows complex nested structures, so even advanced scenarios fit in one file.\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "InEx is a lightweight highly configurable Python launcher based on microkernel architecture",
"version": "3.1.1",
"project_urls": {
"Bug Tracker": "https://github.com/speechpro/inex-launcher/issues",
"Homepage": "https://github.com/speechpro/inex-launcher"
},
"split_keywords": [
"speechpro",
"inex",
"launcher",
"inex-launcher",
"command-line",
"configuration",
"yaml"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "25397a00c6e97f39a434ec43197364c3a8cedf8f7265538dc1185bc037224a84",
"md5": "a514ab38e7d2b2e90c09e238b1bd6728",
"sha256": "f1858e6381dc83da3e2313dfb5da45e68e1e6bde6a5952df21b25b7af3f73a5e"
},
"downloads": -1,
"filename": "inex_launcher-3.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a514ab38e7d2b2e90c09e238b1bd6728",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 13800,
"upload_time": "2025-08-31T21:14:24",
"upload_time_iso_8601": "2025-08-31T21:14:24.207988Z",
"url": "https://files.pythonhosted.org/packages/25/39/7a00c6e97f39a434ec43197364c3a8cedf8f7265538dc1185bc037224a84/inex_launcher-3.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6b21a3dd7aec63357174d33a0054adfcd62e1c705f4180545a1ecde71e608200",
"md5": "581a09ba5d0fc6f125ab036e789ec50b",
"sha256": "722a263b8c7c9f8f949948025103a4ed00771d56d82548e26071d9d0744c3b8d"
},
"downloads": -1,
"filename": "inex-launcher-3.1.1.tar.gz",
"has_sig": false,
"md5_digest": "581a09ba5d0fc6f125ab036e789ec50b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 13576,
"upload_time": "2025-08-31T21:14:25",
"upload_time_iso_8601": "2025-08-31T21:14:25.293453Z",
"url": "https://files.pythonhosted.org/packages/6b/21/a3dd7aec63357174d33a0054adfcd62e1c705f4180545a1ecde71e608200/inex-launcher-3.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-31 21:14:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "speechpro",
"github_project": "inex-launcher",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "omegaconf",
"specs": []
},
{
"name": "networkx",
"specs": []
}
],
"lcname": "inex-launcher"
}