YAML-based configuration with Pydantic validation and dynamic object instantiation.
Why EzConfy?
ML projects constantly deal with configuration: learning rates, model parameters, dataset options, augmentation pipelines. EzConfy gives you typed, validated configs with automatic object wiring — without the complexity of a full framework like Hydra.
from ezconfy import ConfigBuilder
cfg = ConfigBuilder.from_files(config_paths="config.yaml", schema_path="schema.yaml")
print(cfg.training.batch_size) # validated, typed access
What you get
| Feature | Description |
|---|---|
| Pydantic validation | Type checking with clear error messages |
| Schema-aware casting | Strings become Path objects, etc. — before constructors run |
| Dynamic instantiation | Construct any Python class from YAML via _target_type_ |
| Placeholders | ${key}, attribute access, method calls, arithmetic |
| Multi-file merge | Split configs across files, override per experiment |
| Code generation | Generate Pydantic models for editor autocompletion |
Installation
pip install ezconfy
Requires Python 3.11+.
Quick Start
config.yaml
lr: 0.001
batch_size: 32
data_path: ./data
schema.yaml
lr: float
batch_size: int
data_path: pathlib:Path
train.py
from ezconfy import ConfigBuilder
cfg = ConfigBuilder.from_files(
config_paths="config.yaml",
schema_path="schema.yaml",
)
print(cfg.lr) # 0.001 (float)
print(cfg.batch_size) # 32 (int)
print(cfg.data_path) # PosixPath('data') — automatically cast
Schema
A schema file describes the expected shape and types of your configuration:
types:
OptimizerType:
- adam
- sgd
- rmsprop
schema:
model:
hidden_dims: list[int]
training:
batch_size: int = 32
num_epochs: int = 10
shuffle: bool = true
dropout: float?
optimizer: OptimizerType
If no types are needed, the entire YAML is treated as the root schema (no schema: wrapper required).
Supported type syntax
| Syntax | Meaning |
|---|---|
int, float, str, bool |
Primitive types |
type? |
Optional (defaults to None) |
type = value |
Type with default |
list[T] |
List of T |
A | B |
Union type |
[a, b, c] |
Enum |
Child < Parent |
Model inheritance |
pathlib:Path |
External type (import path) |
/path/to/file.py:ClassName |
External type (file path) |
Object Instantiation
Construct Python objects directly from config using _target_type_:
dataset:
_target_type_: mypackage.data:MyDataset
_init_args_:
num_classes: 100
root: /data
Use _init_method_ for alternative constructors (e.g. from_pretrained):
encoder:
_target_type_: mypackage.models:BertEncoder
_init_method_: from_pretrained
_init_args_:
model_name: bert-base-uncased
Placeholders & Expressions
Reference other config values with ${key}. Supports attribute access, method calls, and arithmetic:
lr: 0.001
warmup_lr: ${lr * 10} # arithmetic
num_classes: 10
dataset:
_target_type_: mypackage.data:MyDataset
_init_args_:
num_classes: ${num_classes} # scalar reference
model:
_target_type_: mypackage.models:Classifier
_init_args_:
in_features: ${dataset.num_classes} # attribute access
params: ${encoder.parameters()} # method call
Objects are instantiated in topological order based on their dependencies — forward references work automatically.
Multi-file Configs & Overrides
Pass multiple files — they are deep-merged in order (later files win on conflicts):
cfg = ConfigBuilder.from_files(
config_paths=["base.yaml", "experiment.yaml"],
)
Apply programmatic overrides on top:
cfg = ConfigBuilder.from_files(
config_paths="config.yaml",
overrides={"training": {"batch_size": 64}},
)
Code Generation CLI
Generate a Pydantic model file from a schema for editor autocompletion and static analysis:
ezconfy generate schema.yaml -o models.py
Documentation
Full documentation: alessioarcara.github.io/EzConfy
License
Metadata
Release files for ezconfy 0.1.14
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ezconfy-0.1.14.tar.gz | 130.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ezconfy-0.1.14-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 149.7 kB
Release files / ezconfy-0.1.14.tar.gz
| Download URL | ezconfy-0.1.14.tar.gz |
|---|---|
| Size | 130.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6da3d39586e7bf0ae258ba15ad1d9f9ba3148bbb985109328e63b20ea98b889
|
|
BLAKE2b-256 checksum How to use checksums |
74719335a33d571d5524d7a3ae43f98133eb946e2062e513e82de29048ddfb3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.15
|
Release files / ezconfy-0.1.14-py3-none-any.whl
| Download URL | ezconfy-0.1.14-py3-none-any.whl |
|---|---|
| Size | 18.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a0b92e7838b41e55146f08fe4bc07b93e545308791887fd6d1af289fe869dd79
|
|
BLAKE2b-256 checksum How to use checksums |
f3c15073d5233beffc7203a252ed39c6ebe06ff0bb5e74e8f559e1c0041356f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.15
|