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