ClearConf is a library created to support easy and manageble python configuration. It consists in a CLI tool to manage the configuration directory, and in a python class (BaseConfig) which adds additional functionalities to a configuration class.
Project description
ClearConf is a Python configuration management library that provides a clean, hierarchical way to define and manage configurations through Python classes.
Defining configurations in python makes them
- easy to access: you can read configuration with a simple
importstatement - flexible: compositionality, inerhitance and other python features are integrated into clearconf
- customizable: the framework allows to easily define new class-method and Types to add custom functionalities
Core Concepts
BaseConfig Class
The base class that all configurations must inherit from. It provides the foundation for hierarchical configuration management.
from clearconf import BaseConfig
class MyConfig(BaseConfig):
pass
When your root config subclass BaseConfig all nested classes will be automatically set to subclass BaseConfig. This will add to each of them a series of functionalities such as serialization functions and the ability to set values through the command line.
Configuration Structure
Configurations are defined using nested Python classes that inherit from
BaseConfig
. Each class represents a configuration section.
class Config(BaseConfig):
seed = 1234
class Model:
num_layers = 16
class Params:
learning_rate = 0.001
Features
1. Dynamic Values
Values that need to be computed can use the [eval] prefix:
class Config(BaseConfig):
model_name = "resnet"
checkpoint_path = '[eval]f"checkpoints/{cfg.model_name}.pt"'
Dynamic values are resolved at run time. This means that in the following case:
class CommonConfig(BaseConfig):
class Logging:
exp_dir:str = '[eval]f"{cfg.Method.name}_{cfg.Data.name}"'
class Method:
device:str = "cuda:0"
class Config(CommonConfig):
class Method(CommonConfig.Method, MyMethod):
name = 'MethodA'
checkpoint = project_root / '../checkpoints/method.pt'
class MyDataset(BaseConfig):
batch_size = 128
name = '[eval]f"DatasetA_{cls.batch_size}"'
Config.Data = MyDataset
Config.Logging.exp_dir
The attribute Config.Logging.exp_dir would be resolved to 'MethodA_DatasetA_128'
2. Hidden Fields
Fields that should be ignored by clearconf functions (e.g. to_dict) can be marked as
Hidden
:
from clearconf import BaseConfig, Hidden
class Config(BaseConfig):
api_key: Hidden = "secret123"
3. Interactive Configuration
Fields that require user input can be marked with
Prompt
:
from clearconf import BaseConfig, Prompt
class Config(BaseConfig):
dataset_path: Prompt = "path/to/default"
This will open an editor and ask the user to input a value.
4. Class Inheritance
Configurations can inherit from implementation classes to provide direct access to configuration values:
from models import MyModel
class Config(BaseConfig):
class Model(MyModel):
num_layers = 16
hidden_size = 256
An instance of the implementation class can then be obtained through the configuration:
model = Config.Model()
The instance will have direct access to the values provided from inside the configuration:
class MyMethod:
def __init__(self):
print(self.num_layer)
print(self.hidden_size)
5. Configuration Methods
These methods, set as Hidden, are automatically added to all BaseConfig configurations.
to_dict()
Converts the configuration to a dictionary:
config_dict = Config.to_dict()
to_flat_dict()
Converts the configuration to a flattened dictionary with dot notation:
flat_dict = Config.to_flat_dict()
# {'Model.num_layers': 16, 'Model.hidden_size': 256}
to_json()
Serializes the configuration to JSON:
json_str = Config.to_json()
6. Configuration Access
Configurations can be accessed using dot notation:
# Access nested values
learning_rate = Config.Model.Params.learning_rate
# Access parent configuration
model = Config.Model() # Creates model instance with config values
7. Command Line Integration
The library supports automatic command-line argument parsing to override configuration values:
python train.py --Model models.MyModel --Model.num_layers 32 --learning_rate 0.0005
Example Configuration
from clearconf import BaseConfig, Hidden, Prompt
from models import ResNet
from datasets import ImageDataset
class TrainingConfig(BaseConfig):
seed = 1234
device = "cuda"
class Model(ResNet):
name = "resnet50"
num_classes = 10
pretrained = True
checkpoint: Hidden = "checkpoints/latest.pt"
class Data:
dataset = ImageDataset
root_dir: Prompt = "./data"
class Params:
batch_size = 32
num_workers = 4
class Optimizer:
name = "adam"
learning_rate = 0.001
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clearconf-0.3.22.tar.gz.
File metadata
- Download URL: clearconf-0.3.22.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.10.14 Linux/5.14.0-427.42.1.el9_4.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de0fa1c90bc0bf53ec418b821a4f178d7ca25d6287ab8cf522ae3d00c8b8e290
|
|
| MD5 |
ff5a147889b15f5f7bdb1a5da6338b42
|
|
| BLAKE2b-256 |
1855cab58bd5e0e7da027c544e38b875580724a598d4a06cfc1e5433d33dae00
|
File details
Details for the file clearconf-0.3.22-py3-none-any.whl.
File metadata
- Download URL: clearconf-0.3.22-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.10.14 Linux/5.14.0-427.42.1.el9_4.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10d34c1fceb6292c6316f517ab36dcff86fc5aa137f7f339fafaae2b8bd550cf
|
|
| MD5 |
bcbd463017b05a675f0629be133ad955
|
|
| BLAKE2b-256 |
2dbcc0305914ba132a8187fe36672ecd1c6248c22871d17533c8c68870167b56
|