This is an python wrapper for toml++ (https://marzer.github.io/tomlplusplus/).
Some points you may want to know before use:
- Using
toml++means that this module is fully compatible with TOML v1.0.0. - We convert toml structure to native python data structures (dict/list etc.) when parsing, this is more inline with what
jsonmodule does. - The binding is using pybind11.
- The project is tested using toml-test and pytest.
- We support all major platforms (Linux, Mac OSX and Windows), for both CPython and Pypy and all recent Python versions. You just need to
pip installand we have a pre-compiled binaries ready. No need to play withclang,cmakeor any C++ toolchains.
In [1]: import pytomlpp
In [2]: toml_string = 'hello = "世界"'
In [3]: pytomlpp.loads(toml_string)
Out[3]: {'hello': '世界'}
In [4]: type(_)
Out[4]: dict
In [6]: pytomlpp.dumps({"你好": "world"})
Out[6]: '"你好" = "world"'
There are some existing python TOML parsers on the market but from my experience they are implemented purely in python which is a bit slow.
Parsing data.toml 1000 times:
rtoml: 0.540 s
pytomlpp: 0.542 s ( 1.00x)
tomli: 2.923 s ( 5.40x)
qtoml: 8.748 s (16.18x)
tomlkit: 51.608 s (95.49x)
toml: Parsing failed. Likely not TOML 1.0.0-compliant.
Test it for yourself using the benchmark script.
We recommend you to use pip to install this package:
pip install pytomlppYou can also use conda to install this package, on all common platforms & python versions.
If you have an issue with a package from conda-forge, you can raise an issue on the feedstock
conda install -c conda-forge pytomlppYou can also install from source:
git clone git@github.com:bobfang1992/pytomlpp.git --recurse-submodules=third_party/tomlplusplus --shallow-submodules
cd pytomlpp
pip install .- Python 3.8 or higher
- C++17 compatible compiler (GCC 7+, Clang 5+, MSVC 2017+)
- Git (for cloning submodules)
- Clone the repository with submodules:
git clone git@github.com:bobfang1992/pytomlpp.git --recurse-submodules
cd pytomlppIf you already cloned without submodules:
git submodule update --init --recursive- Create a virtual environment (recommended):
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install in editable mode with development dependencies:
# Install package in editable mode
pip install -e .
# Install test dependencies
pip install -r tests/requirements.txt# Install build tool
pip install build
# Build wheel and source distribution
python -m build
# Output will be in dist/
ls dist/
# pytomlpp-1.1.0-cp312-cp312-macosx_*.whl
# pytomlpp-1.1.0.tar.gz# Install in editable mode (changes to Python code take effect immediately)
pip install -e .
# Rebuild C++ extension after changes
pip install -e . --force-reinstall --no-deps# Build extension in-place
python setup.py build_ext --inplace
# Install
python setup.py install# From project root
pytest tests/
# With verbose output
pytest tests/ -v
# With coverage
pip install pytest-cov
pytest tests/ --cov=pytomlpp --cov-report=html# Run only API tests
pytest tests/python-tests/test_api.py
# Run specific test function
pytest tests/python-tests/test_api.py::test_loads_valid_toml_files -v
# Run with keyword matching
pytest tests/ -k "encode"cd tests
./run.sh # Runs the official TOML test suitecd benchmark
pip install -r requirements.txt
python run.py# Install pre-commit hooks
pip install pre-commit
pre-commit install
# Run manually
pre-commit run --all-filespip install mypy
mypy src/pytomlpp/pytomlpp/
├── src/
│ ├── pytomlpp/ # Python package
│ │ ├── __init__.py
│ │ ├── _io.py
│ │ └── _impl.pyi # Type stubs
│ ├── pytomlpp.cpp # C++ bindings (main)
│ ├── type_casters.cpp # Python/C++ type conversions
│ └── encoding_decoding.cpp # TOML encoding/decoding
├── include/
│ └── pytomlpp/ # C++ headers
├── third_party/
│ └── tomlplusplus/ # toml++ submodule
├── tests/
│ └── python-tests/ # Python test suite
├── benchmark/ # Performance benchmarks
├── pyproject.toml # Project metadata (PEP 621)
└── setup.py # C++ extension build config
git submodule update --init --recursiveMake sure you have a C++17 compatible compiler:
- Linux: GCC 7+ or Clang 5+
- macOS: Xcode 10+ (Clang 5+)
- Windows: Visual Studio 2017 or later
Reinstall in editable mode:
pip install -e . --force-reinstall --no-deps- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
pytest tests/) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See CONTRIBUTING.md for detailed guidelines (if available).
- Issues: GitHub Issues
- Discussions: GitHub Discussions