---
# System prepended metadata

title: Python / toml
tags: [PyPi, toml, Python, load]

---

Python / toml
===
###### tags: `Python`
###### tags: `Python`, `PyPi`, `toml`, `load`
<br>

[TOC]

<br>

## TOML 教學
> TOML: Tom's Obvious Minimal Language

- [【資料交換格式 - TOML】更加人性化的資料交換格式](https://vocus.cc/article/64f08bf3fd897800014d23a4)
- [YAML Syntax](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html)


<br>

## toml 範例
### vllm 的 toml 範例
> [[github] vllm-project/vllm/pyproject.toml](https://github.com/vllm-project/vllm/blob/main/pyproject.toml)

```toml!=
[build-system]
# Should be mirrored in requirements-build.txt
requires = [
    "cmake>=3.26",
    "ninja",
    "packaging",
    "setuptools>=61",
    "setuptools-scm>=8.0",
    "torch == 2.5.1",
    "wheel",
    "jinja2",
]
build-backend = "setuptools.build_meta"

[tool.setuptools_scm]
# version_file = "vllm/_version.py" # currently handled by `setup.py:get_version()`

[tool.ruff]
# Allow lines to be as long as 80.
line-length = 80
exclude = [
    # External file, leaving license intact
    "examples/fp8/quantizer/quantize.py"
]

[tool.ruff.lint.per-file-ignores]
"vllm/version.py" = ["F401"]
"vllm/_version.py" = ["ALL"]

[tool.ruff.lint]
select = [
    # pycodestyle
    "E",
    # Pyflakes
    "F",
    # pyupgrade
    "UP",
    # flake8-bugbear
    "B",
    # flake8-simplify
    "SIM",
    # isort
    # "I",
    "G",
]
ignore = [
    # star imports
    "F405", "F403",
    # lambda expression assignment
    "E731",
    # Loop control variable not used within loop body
    "B007",
    # f-string format
    "UP032",
]

[tool.mypy]
ignore_missing_imports = true
check_untyped_defs = true
follow_imports = "silent"

# After fixing type errors resulting from follow_imports: "skip" -> "silent",
# move the directory here and remove it from tools/mypy.sh
files = [
    "vllm/*.py",
    "vllm/adapter_commons",
    "vllm/assets",
    "vllm/entrypoints",
    "vllm/core",
    "vllm/inputs",
    "vllm/logging_utils",
    "vllm/multimodal",
    "vllm/platforms",
    "vllm/transformers_utils",
    "vllm/triton_utils",
    "vllm/usage",
]
# TODO(woosuk): Include the code from Megatron and HuggingFace.
exclude = [
    "vllm/model_executor/parallel_utils/|vllm/model_executor/models/",
    # Ignore triton kernels in ops.
    'vllm/attention/ops/.*\.py$'
]

[tool.codespell]
ignore-words-list = "dout, te, indicies, subtile"
skip = "./tests/models/fixtures,./tests/prompts,./benchmarks/sonnet.txt,./tests/lora/data,./build"

[tool.isort]
use_parentheses = true
skip_gitignore = true

[tool.pytest.ini_options]
markers = [
    "skip_global_cleanup",
    "core_model: enable this model test in each PR instead of only nightly",
    "cpu_model: enable this model test in CPU tests",
    "quant_model: run this model test under Quantized category",
    "split: run this test as part of a split",
    "distributed: run this test only in distributed GPU tests",
    "skip_v1: do not run this test with v1",
    "optional: optional tests that are automatically skipped, include --optional to run them",
]
```

<br>

### 使用 Python toml 套件讀取 toml 檔
```python=
import toml
with open('pyproject.toml') as f:
    d = toml.load(f)

import json
print(json.dumps(d, indent=4))
```
```python=
{
    "build-system": {
        "requires": [
            "cmake>=3.26",
            "ninja",
            "packaging",
            "setuptools>=61",
            "setuptools-scm>=8.0",
            "torch == 2.5.1",
            "wheel",
            "jinja2"
        ],
        "build-backend": "setuptools.build_meta"
    },
    "tool": {
        "setuptools_scm": {},
        "ruff": {
            "line-length": 80,
            "exclude": [
                "examples/fp8/quantizer/quantize.py"
            ],
            "lint": {
                "per-file-ignores": {
                    "vllm/version.py": [
                        "F401"
                    ],
                    "vllm/_version.py": [
                        "ALL"
                    ]
                },
                "select": [
                    "E",
                    "F",
                    "UP",
                    "B",
                    "SIM",
                    "G"
                ],
                "ignore": [
                    "F405",
                    "F403",
                    "E731",
                    "B007",
                    "UP032"
                ]
            }
        },
        "mypy": {
            "ignore_missing_imports": true,
            "check_untyped_defs": true,
            "follow_imports": "silent",
            "files": [
                "vllm/*.py",
                "vllm/adapter_commons",
                "vllm/assets",
                "vllm/entrypoints",
                "vllm/core",
                "vllm/inputs",
                "vllm/logging_utils",
                "vllm/multimodal",
                "vllm/platforms",
                "vllm/transformers_utils",
                "vllm/triton_utils",
                "vllm/usage"
            ],
            "exclude": [
                "vllm/model_executor/parallel_utils/|vllm/model_executor/models/",
                "vllm/attention/ops/.*\\.py$"
            ]
        },
        "codespell": {
            "ignore-words-list": "dout, te, indicies, subtile",
            "skip": "./tests/models/fixtures,./tests/prompts,./benchmarks/sonnet.txt,./tests/lora/data,./build"
        },
        "isort": {
            "use_parentheses": true,
            "skip_gitignore": true
        },
        "pytest": {
            "ini_options": {
                "markers": [
                    "skip_global_cleanup",
                    "core_model: enable this model test in each PR instead of only nightly",
                    "cpu_model: enable this model test in CPU tests",
                    "quant_model: run this model test under Quantized category",
                    "split: run this test as part of a split",
                    "distributed: run this test only in distributed GPU tests",
                    "skip_v1: do not run this test with v1",
                    "optional: optional tests that are automatically skipped, include --optional to run them"
                ]
            }
        }
    }
}
```

<br>

## Python toml 套件的使用範例

### 讀取與設定
> []()
```python=
import toml
 
# Load a TOML file
with open('config.toml', 'r') as f:
    config = toml.load(f)
 
config['database']['level2'] = 'new added information'
with open('config.toml', 'w') as f:
    toml.dump(config, f)
```

<br>

{%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}
