Name | py-build-cmake JSON |
Version |
0.5.0
JSON |
| download |
home_page | None |
Summary | Modern, PEP 517 compliant build backend for creating Python packages with |
upload_time | 2025-08-14 21:50:16 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.7 |
license | None |
keywords |
pep517
cmake
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<h1 align="center"><img src="https://tttapa.github.io/py-build-cmake/_static/py-build-cmake-logo.svg" alt="py-build-cmake" width="64"/> <br>py-build-cmake</h1>
<div align="center">
[](https://github.com/tttapa/py-build-cmake/actions/workflows/wheel.yml)
[](https://tttapa.github.io/py-build-cmake)
[](https://pypi.org/project/py-build-cmake)
</div>
A modern, [PEP 517](https://www.python.org/dev/peps/pep-0517/) compliant build
backend for creating Python packages with extensions built using CMake.
## Features
- Building and packaging C, C++ or Fortran extension modules for Python using CMake
- Declarative configuration using `pyproject.toml` ([PEP 621](https://www.python.org/dev/peps/pep-0621/))
- Editable/development installations for Python modules ([PEP 660](https://www.python.org/dev/peps/pep-0660/))
- Easy integration with [pybind11](https://github.com/pybind/pybind11), [nanobind](https://github.com/wjakob/nanobind) and [SWIG](https://github.com/swig/swig), with stable ABI support
- Stub generation for type checking and autocompletion
- Customizable CMake configuration, build, and installation options
- Support for installation of multiple configurations and components, across different Wheel packages
- First-class cross-compilation support
- Reproducible Wheels and source distributions
- No dependency on [setuptools](https://github.com/pypa/setuptools)
- Compatible with [cibuildwheel](https://github.com/pypa/cibuildwheel) for building Wheels
## Installation
The py-build-cmake package is available on
[PyPI](https://pypi.org/project/py-build-cmake/):
```sh
pip install py-build-cmake
```
## Documentation
The documentation can be found on **<https://tttapa.github.io/py-build-cmake>**.
The format of the configuration file is explained in
[Config.md](https://tttapa.github.io/py-build-cmake/reference/config.html).
Alternatively, use the [command-line interface](https://tttapa.github.io/py-build-cmake/usage/cli.html)
to get the documentation for all supported options:
```sh
py-build-cmake config format
```
To get started quickly, have a look at the following section and the README in
[`examples/minimal`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal),
which goes over the project structure and the configuration files you'll need.
## Usage
If you don't have one already, add a `pyproject.toml` configuration file to your
project's repository. Specify the mandatory project metadata ([PyPA: Declaring project metadata](https://packaging.python.org/en/latest/specifications/declaring-project-metadata)),
and tell py-build-cmake how to build your CMake project. For example:
```toml
[project] # Project metadata
name = "example-project"
requires-python = ">=3.7"
readme = "README.md"
license = "MIT"
license-files = ["LICENSE"]
dependencies = ["numpy"]
dynamic = ["version", "description"]
[build-system] # How pip and other frontends should build this project
requires = ["py-build-cmake~=0.5.0"]
build-backend = "py_build_cmake.build"
[tool.py-build-cmake.module] # Where to find the Python module to package
directory = "src-python"
[tool.py-build-cmake.sdist] # What to include in source distributions
include = ["CMakeLists.txt", "src/*"]
[tool.py-build-cmake.cmake] # How to build the CMake project
build_type = "RelWithDebInfo"
source_path = "src"
build_args = ["-j"]
install_components = ["python_modules"]
[tool.py-build-cmake.stubgen] # Whether and how to generate typed stub files
```
The README of [`examples/minimal`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal)
describes this configuration file in much more detail.
Then use [`pip`](https://github.com/pypa/pip), [`build`](https://github.com/pypa/build)
or another PEP 517 compatible frontend to build and/or install the package.
Build sdist and wheel packages you can upload to PyPI:
```sh
python -m pip install -U build
python -m build . # find the sdist and wheel file in the 'dist' folder
```
Install the package in the current environment:
```sh
pip install . # normal installation
pip install -e . # editable installation
```
## Examples
As an introduction to py-build-cmake, see [`examples/minimal`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal)
for a detailed overview of the configuration files and the directory structure,
using a very simple Python module as an example.
For a more advanced, real-world example, see [`examples/pybind11-project`](https://github.com/tttapa/py-build-cmake/tree/main/examples/pybind11-project)
and [`examples/nanobind-project`](https://github.com/tttapa/py-build-cmake/tree/main/examples/nanobind-project).
Alternatively, SWIG can also be used instead of pybind11 or nanobind, as
demonstrated in [`examples/swig-project`](https://github.com/tttapa/py-build-cmake/tree/main/examples/swig-project).
If you are interested in packaging C/C++/Fortran programs using py-build-cmake,
have a look at [`examples/minimal-program`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal-program).
See the [`examples`](https://github.com/tttapa/py-build-cmake/tree/main/examples) folder for a full list of examples.
A full example that uses the Conan package manager for C++ dependencies, and
that uses GitHub Actions to deploy the Wheel packages built by py-build-cmake
to PyPI can be found in [tttapa/py-build-cmake-example](https://github.com/tttapa/py-build-cmake-example).
## Projects using py-build-cmake
If you need more examples, you can look at the following projects using
py-build-cmake as their Python build backend:
- [alpaqa](https://github.com/kul-optec/alpaqa/tree/develop)
- [QPALM](https://github.com/kul-optec/QPALM)
## Alternatives and related tools
- [scikit-build-core](https://github.com/scikit-build/scikit-build-core): alternative CMake build backend, successor of [scikit-build](https://github.com/scikit-build/scikit-build)
- [meson-python](https://github.com/mesonbuild/meson-python): Meson build backend
- [flit](https://github.com/pypa/flit): pure-Python packaging tool and build backend
- [hatchling](https://hatch.pypa.io/latest/config/build/#build-system): build backend of the [Hatch](https://hatch.pypa.io/latest/) project manager, supports build hooks
- [poetry-core](https://python-poetry.org/docs/pyproject/#poetry-and-pep-517): pure-Python build backend for the [Poetry](https://python-poetry.org/) package manager
- [crossenv](https://github.com/benfogle/crossenv): tool to trick `setuptools` into cross-compiling by monkey patching the `sysconfig` and `distutils` modules
Raw data
{
"_id": null,
"home_page": null,
"name": "py-build-cmake",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "pep517, cmake",
"author": null,
"author_email": "Pieter P <pieter.p.dev@outlook.com>",
"download_url": "https://files.pythonhosted.org/packages/2b/55/21e9ecb1546d6145dc37f9901d8e98e2c90da47b7882282c2eacd0f580e7/py_build_cmake-0.5.0.tar.gz",
"platform": null,
"description": "<h1 align=\"center\"><img src=\"https://tttapa.github.io/py-build-cmake/_static/py-build-cmake-logo.svg\" alt=\"py-build-cmake\" width=\"64\"/> <br>py-build-cmake</h1>\n<div align=\"center\">\n\n[](https://github.com/tttapa/py-build-cmake/actions/workflows/wheel.yml)\n[](https://tttapa.github.io/py-build-cmake)\n[](https://pypi.org/project/py-build-cmake)\n\n</div>\n\nA modern, [PEP 517](https://www.python.org/dev/peps/pep-0517/) compliant build\nbackend for creating Python packages with extensions built using CMake.\n\n## Features\n\n - Building and packaging C, C++ or Fortran extension modules for Python using CMake\n - Declarative configuration using `pyproject.toml` ([PEP 621](https://www.python.org/dev/peps/pep-0621/))\n - Editable/development installations for Python modules ([PEP 660](https://www.python.org/dev/peps/pep-0660/))\n - Easy integration with [pybind11](https://github.com/pybind/pybind11), [nanobind](https://github.com/wjakob/nanobind) and [SWIG](https://github.com/swig/swig), with stable ABI support\n - Stub generation for type checking and autocompletion\n - Customizable CMake configuration, build, and installation options\n - Support for installation of multiple configurations and components, across different Wheel packages\n - First-class cross-compilation support\n - Reproducible Wheels and source distributions\n - No dependency on [setuptools](https://github.com/pypa/setuptools)\n - Compatible with [cibuildwheel](https://github.com/pypa/cibuildwheel) for building Wheels\n\n## Installation\n\nThe py-build-cmake package is available on\n[PyPI](https://pypi.org/project/py-build-cmake/):\n\n```sh\npip install py-build-cmake\n```\n\n## Documentation\n\nThe documentation can be found on **<https://tttapa.github.io/py-build-cmake>**.\n\nThe format of the configuration file is explained in\n[Config.md](https://tttapa.github.io/py-build-cmake/reference/config.html).\n\nAlternatively, use the [command-line interface](https://tttapa.github.io/py-build-cmake/usage/cli.html)\nto get the documentation for all supported options:\n```sh\npy-build-cmake config format\n```\n\nTo get started quickly, have a look at the following section and the README in\n[`examples/minimal`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal),\nwhich goes over the project structure and the configuration files you'll need.\n\n## Usage\n\nIf you don't have one already, add a `pyproject.toml` configuration file to your\nproject's repository. Specify the mandatory project metadata ([PyPA: Declaring project metadata](https://packaging.python.org/en/latest/specifications/declaring-project-metadata)),\nand tell py-build-cmake how to build your CMake project. For example:\n\n```toml\n[project] # Project metadata\nname = \"example-project\"\nrequires-python = \">=3.7\"\nreadme = \"README.md\"\nlicense = \"MIT\"\nlicense-files = [\"LICENSE\"]\ndependencies = [\"numpy\"]\ndynamic = [\"version\", \"description\"]\n\n[build-system] # How pip and other frontends should build this project\nrequires = [\"py-build-cmake~=0.5.0\"]\nbuild-backend = \"py_build_cmake.build\"\n\n[tool.py-build-cmake.module] # Where to find the Python module to package\ndirectory = \"src-python\"\n\n[tool.py-build-cmake.sdist] # What to include in source distributions\ninclude = [\"CMakeLists.txt\", \"src/*\"]\n\n[tool.py-build-cmake.cmake] # How to build the CMake project\nbuild_type = \"RelWithDebInfo\"\nsource_path = \"src\"\nbuild_args = [\"-j\"]\ninstall_components = [\"python_modules\"]\n\n[tool.py-build-cmake.stubgen] # Whether and how to generate typed stub files\n```\nThe README of [`examples/minimal`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal)\ndescribes this configuration file in much more detail.\n\nThen use [`pip`](https://github.com/pypa/pip), [`build`](https://github.com/pypa/build)\nor another PEP 517 compatible frontend to build and/or install the package.\n\nBuild sdist and wheel packages you can upload to PyPI:\n```sh\npython -m pip install -U build\npython -m build . # find the sdist and wheel file in the 'dist' folder\n```\n\nInstall the package in the current environment:\n```sh\npip install . # normal installation\npip install -e . # editable installation\n```\n\n## Examples\n\nAs an introduction to py-build-cmake, see [`examples/minimal`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal)\nfor a detailed overview of the configuration files and the directory structure,\nusing a very simple Python module as an example. \nFor a more advanced, real-world example, see [`examples/pybind11-project`](https://github.com/tttapa/py-build-cmake/tree/main/examples/pybind11-project)\nand [`examples/nanobind-project`](https://github.com/tttapa/py-build-cmake/tree/main/examples/nanobind-project). \nAlternatively, SWIG can also be used instead of pybind11 or nanobind, as\ndemonstrated in [`examples/swig-project`](https://github.com/tttapa/py-build-cmake/tree/main/examples/swig-project). \nIf you are interested in packaging C/C++/Fortran programs using py-build-cmake,\nhave a look at [`examples/minimal-program`](https://github.com/tttapa/py-build-cmake/tree/main/examples/minimal-program). \nSee the [`examples`](https://github.com/tttapa/py-build-cmake/tree/main/examples) folder for a full list of examples.\n\nA full example that uses the Conan package manager for C++ dependencies, and\nthat uses GitHub Actions to deploy the Wheel packages built by py-build-cmake\nto PyPI can be found in [tttapa/py-build-cmake-example](https://github.com/tttapa/py-build-cmake-example).\n\n## Projects using py-build-cmake\n\nIf you need more examples, you can look at the following projects using\npy-build-cmake as their Python build backend:\n\n- [alpaqa](https://github.com/kul-optec/alpaqa/tree/develop)\n- [QPALM](https://github.com/kul-optec/QPALM)\n\n## Alternatives and related tools\n\n- [scikit-build-core](https://github.com/scikit-build/scikit-build-core): alternative CMake build backend, successor of [scikit-build](https://github.com/scikit-build/scikit-build)\n- [meson-python](https://github.com/mesonbuild/meson-python): Meson build backend\n- [flit](https://github.com/pypa/flit): pure-Python packaging tool and build backend\n- [hatchling](https://hatch.pypa.io/latest/config/build/#build-system): build backend of the [Hatch](https://hatch.pypa.io/latest/) project manager, supports build hooks\n- [poetry-core](https://python-poetry.org/docs/pyproject/#poetry-and-pep-517): pure-Python build backend for the [Poetry](https://python-poetry.org/) package manager\n- [crossenv](https://github.com/benfogle/crossenv): tool to trick `setuptools` into cross-compiling by monkey patching the `sysconfig` and `distutils` modules\n",
"bugtrack_url": null,
"license": null,
"summary": "Modern, PEP 517 compliant build backend for creating Python packages with",
"version": "0.5.0",
"project_urls": {
"Documentation": "https://tttapa.github.io/py-build-cmake",
"Source": "https://github.com/tttapa/py-build-cmake",
"Tracker": "https://github.com/tttapa/py-build-cmake/issues"
},
"split_keywords": [
"pep517",
" cmake"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "21298b9dfdb2ce82e068c04c9013d307c1bdd85c4f77c82715d70411ef4ae37d",
"md5": "fe54a821d743f36e3bb3a82c3d2261a7",
"sha256": "8132c443bcec2431ce72247e5e6d651bb29313a9696b456e558c8d584fff6517"
},
"downloads": -1,
"filename": "py_build_cmake-0.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fe54a821d743f36e3bb3a82c3d2261a7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 97082,
"upload_time": "2025-08-14T21:50:15",
"upload_time_iso_8601": "2025-08-14T21:50:15.637499Z",
"url": "https://files.pythonhosted.org/packages/21/29/8b9dfdb2ce82e068c04c9013d307c1bdd85c4f77c82715d70411ef4ae37d/py_build_cmake-0.5.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2b5521e9ecb1546d6145dc37f9901d8e98e2c90da47b7882282c2eacd0f580e7",
"md5": "24822928063308ac9d76d25280a70b55",
"sha256": "85f04cc28a051adafb8100d36e50f1a6f122ea559f237106fdc036ecaa44963b"
},
"downloads": -1,
"filename": "py_build_cmake-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "24822928063308ac9d76d25280a70b55",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 74946,
"upload_time": "2025-08-14T21:50:16",
"upload_time_iso_8601": "2025-08-14T21:50:16.865003Z",
"url": "https://files.pythonhosted.org/packages/2b/55/21e9ecb1546d6145dc37f9901d8e98e2c90da47b7882282c2eacd0f580e7/py_build_cmake-0.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-14 21:50:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tttapa",
"github_project": "py-build-cmake",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "py-build-cmake"
}