pyodr — Python bindings for OpenDocument.core
Decode office documents (ODF, OOXML, legacy MS binary, PDF, CSV, ...) and render them to HTML from Python.
import pyodr
file = pyodr.open("document.odt")
print(pyodr.file_type_to_string(file.file_type()))
service = pyodr.html.translate(file, "cache-dir", pyodr.HtmlConfig())
html = service.bring_offline("output-dir")
for page in html.pages():
print(page.name, page.path)
A small CLI is included: pyodr <file> renders a document and opens it in the
browser; pyodr <file> --serve hosts it over HTTP (via the core HTTP server,
available when built with ODR_WITH_HTTP_SERVER).
Building
The bindings are part of the main CMake build, toggled by ODR_PYTHON:
conan install . -o '&:with_python=True' --build missing
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DODR_PYTHON=ON
cmake --build build --target pyodr_core
PYTHONPATH=build/python ODR_CORE_DATA_PATH=build/data python -m pytest python/tests
pip install . from the repository root builds a wheel via scikit-build-core
(see the root pyproject.toml); run conan install first and point
CMAKE_ARGS at the generated conan_toolchain.cmake so the C++ dependencies
resolve. Wheels bundle libmagic's database, so match that option:
conan install . -o '&:with_python=True' -o '&:bundle_assets=True' --build missing
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$PWD/conan_toolchain.cmake" pip install .
Runtime data
Rendering uses shipped assets (CSS/JS), and MIME detection uses libmagic's
compiled database (magic.mgc). Wheels bundle both under pyodr/data and pick
them up automatically. For in-tree builds set ODR_CORE_DATA_PATH (the tests
read it) and, if needed, ODR_LIBMAGIC_DATABASE_PATH, or call
pyodr.GlobalParams.set_odr_core_data_path(...) /
set_libmagic_database_path(...).
Neither is fatal when missing: without the assets, rendering fails on the
individual resource; without the database, odrcore tries the system database and
then falls back to its own magic sniffing (which sees an .odt as
application/zip rather than the ODF type).
Metadata
Release files for pyodr 6.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyodr-6.0.0.tar.gz | 1.1 MB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyodr-6.0.0-cp314-cp314-manylinux_2_39_x86_64.whl | CPython 3.14 | CPython 3.14 | Linux glibc 2.39+ x86-64 | Details |
| pyodr-6.0.0-cp314-cp314-macosx_26_0_arm64.whl | CPython 3.14 | CPython 3.14 | macOS 26.0+ ARM64 | Details |
Total release size: 7.2 MB
Release files / pyodr-6.0.0.tar.gz
| Download URL | pyodr-6.0.0.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
26ebd6687ffaba5e5580998381fa0946e170d284e4fc7aac75dfc885adca6877
|
|
BLAKE2b-256 checksum How to use checksums |
9135c4e78057ec432ee994d7f4ac209ea7814839cefe457cce4d23c99012b0d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.
Transparency logRelease files / pyodr-6.0.0-cp314-cp314-manylinux_2_39_x86_64.whl
| Download URL | pyodr-6.0.0-cp314-cp314-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 3.5 MB |
| Tags | CPython 3.14 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
0f12d315e55ed7f31df7821eec1460f0d6e52a5a2ee56368a466089b13c4cc1c
|
|
BLAKE2b-256 checksum How to use checksums |
63f0f4d48f1a8114cb24ff023b3d59f9d0dc6096bcf844c24c16632a0858d00e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.
Transparency logRelease files / pyodr-6.0.0-cp314-cp314-macosx_26_0_arm64.whl
| Download URL | pyodr-6.0.0-cp314-cp314-macosx_26_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.14 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8653d5b003fd1650411bb3ce2a85c4013858886140bce133039e9e65944367d9
|
|
BLAKE2b-256 checksum How to use checksums |
71cf1c2eef153c5560e4a2f43857d3fffbd331d6549cb9c9e99d68941011a823
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.
Transparency log