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 %}