-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(template): Added pybind11 as an option for build system #163
Changes from all commits
f816654
e9c6226
ff88a54
7e83d22
2e84ac2
1f04f8e
40433a4
7625f4e
5e78f26
a61dfc6
4c4877c
5dfb8c5
0b252fc
c95ebad
c593005
653e049
535c090
83dc6e0
5359d5c
c79bb3b
642b9ba
4ec2dfe
bf7529d
bf5d323
bcff667
11ccc28
4ce85f4
410d29d
a18f98d
cd8ed24
b885513
b52b882
d7114a6
2e4cbf7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
#include <pybind11/pybind11.h> | ||
|
||
int add(int i, int j) { return i + j; } | ||
|
||
namespace py = pybind11; | ||
|
||
PYBIND11_MODULE(_core, m) { | ||
m.doc() = R"pbdoc( | ||
Pybind11 example plugin | ||
----------------------- | ||
.. currentmodule:: python_example | ||
.. autosummary:: | ||
:toctree: _generate | ||
add | ||
subtract | ||
)pbdoc"; | ||
|
||
m.def("add", &add, R"pbdoc( | ||
Add two numbers | ||
Some other explanation about the add function. | ||
)pbdoc"); | ||
|
||
m.def( | ||
"subtract", [](int i, int j) { return i - j; }, R"pbdoc( | ||
Subtract two numbers | ||
Some other explanation about the subtract function. | ||
)pbdoc"); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
[build-system] | ||
requires = ["setuptools>=65", "wheel", "pybind11~=2.11.1","build>=0.10.0"] | ||
build-backend = "setuptools.build_meta" | ||
|
||
[project] | ||
name = "{{ cookiecutter.project_slug }}" | ||
authors = [ | ||
{ name = "{{ cookiecutter.author_full_name }}", email = "{{ cookiecutter.author_email }}" }, | ||
] | ||
description = "{{ cookiecutter.project_short_description }}" | ||
readme = "README.md" | ||
classifiers = [ | ||
"Development Status :: 1 - Planning", | ||
"Intended Audience :: Science/Research", | ||
"Intended Audience :: Developers", | ||
{%- if cookiecutter.project_license == "MIT" %} | ||
"License :: OSI Approved :: MIT License", | ||
{%- elif cookiecutter.project_license == "BSD 3 Clause" %} | ||
"License :: OSI Approved :: BSD License", | ||
{%- elif cookiecutter.project_license == "Apache Software License 2.0" %} | ||
"License :: OSI Approved :: Apache Software License", | ||
{%- elif cookiecutter.project_license == "GNU General Public License v3" %} | ||
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)", | ||
{%- endif %} | ||
"Operating System :: OS Independent", | ||
"Programming Language :: Python", | ||
"Programming Language :: Python :: 3", | ||
"Programming Language :: Python :: 3 :: Only", | ||
"Programming Language :: Python :: 3.8", | ||
"Programming Language :: Python :: 3.9", | ||
"Programming Language :: Python :: 3.10", | ||
"Programming Language :: Python :: 3.11", | ||
"Programming Language :: Python :: 3.12", | ||
"Topic :: Scientific/Engineering", | ||
"Typing :: Typed", | ||
] | ||
dynamic = ["version"] | ||
requires-python = ">=3.8.1" | ||
dependencies = [ | ||
{# keep this line here #} | ||
"build>=0.10.0", | ||
{%- if cookiecutter.use_pytest == "yes" -%} | ||
"pytest >= 7.3.2,<8", | ||
{% if cookiecutter.use_coverage == "yes" -%} | ||
"pytest-cov >= 4.1.0,<5", | ||
{% endif %} | ||
{%- endif -%}{#- end of use_pytest -#} | ||
{%- if cookiecutter.use_hypothesis == "yes" -%} | ||
"hypothesis >= 6.0,<7", | ||
{% endif %} | ||
{%- if cookiecutter.use_coverage == "yes" -%} | ||
"coverage >= 7.2.7,<8", | ||
{% endif %} | ||
{%- if cookiecutter.use_blue == "yes" -%} | ||
"blue >= 0.9.1,<1", | ||
{% endif %} | ||
{%- if cookiecutter.use_black == "yes" -%} | ||
"black >= 23.3.0,<24", | ||
{% endif %} | ||
{%- if cookiecutter.use_isort == "yes" -%} | ||
"isort >= 5.12.0,<6", | ||
{% endif %} | ||
{%- if cookiecutter.use_pre_commit -%} | ||
"pre-commit >= 3.3.2,<4", | ||
{% endif %} | ||
{%- if cookiecutter.use_flake8 == "yes" -%} | ||
"flake8 >= 4.0.1, < 7", | ||
{% endif %} | ||
{%- if cookiecutter.use_ruff == "yes" -%} | ||
"ruff >= 0.0.272,<1", | ||
{% endif %} | ||
{%- if cookiecutter.use_mypy == "yes" -%} | ||
"mypy >= 1.3.0,<2", | ||
{% endif %} | ||
{%- if cookiecutter.use_bandit == "yes" -%} | ||
"bandit >= 1.7.5,<2", | ||
{% endif %} | ||
{%- if cookiecutter.use_pydocstyle == "yes" -%} | ||
"pydocstyle >= 6.3.0,<7", | ||
{% endif %} | ||
{%- if cookiecutter.use_vulture == "yes" -%} | ||
"vulture >= 2.7,<3", | ||
{% endif %} | ||
{%- if cookiecutter.use_mccabe == "yes" -%} | ||
"mccabe >= 0.6.1,<1", | ||
{% endif %} | ||
{%- if cookiecutter.use_containers in ['Docker', 'Podman'] -%} | ||
# if you want to use docker-compose from your system, remove compose-go here | ||
"compose-go >= 2.18.1,<3", | ||
{% endif %} | ||
"ipython < 8", | ||
"ipykernel >=6.0.0", | ||
{%- if cookiecutter.documentation_engine == 'mkdocs' -%} | ||
"Jinja2 >=3.1.2,<4", | ||
"mkdocs >=1.4.3,<2", | ||
"mkdocs-exclude >= 1.0.2,<2", | ||
"mkdocs-jupyter >= 0.24.1,<1", | ||
"mkdocs-literate-nav >= 0.6.0,<1", | ||
"mkdocs-macros-plugin >= 0.7.0, < 1", | ||
"mkdocs-material >= 9.1.15,<10", | ||
"mkdocstrings >= 0.21.2,< 1", | ||
"mkdocstrings-python >= 1.1.2,<2", | ||
{% elif cookiecutter.documentation_engine == 'sphinx' -%} | ||
"Sphinx >= 6.2.1,<7", | ||
"sphinx-rtd-theme >= 1.2.2,<2", | ||
"importlib-metadata >= 6.5.1,<7", | ||
"myst-parser >= 0.19.2,<1", | ||
"nbsphinx >= 0.9.2,<1", | ||
"pandoc >= 2.3,<3", | ||
{% elif cookiecutter.documentation_engine == 'jupyter-book' -%} | ||
"jupyter-book >= 0.15.1,<1", | ||
"myst-parser >= 0.18.1,<1", | ||
{% endif %} | ||
] | ||
|
||
[project.urls] | ||
Homepage = "{{ cookiecutter.project_url }}" | ||
"Bug Tracker" = "{{ cookiecutter.project_url }}/issues" | ||
Discussions = "{{ cookiecutter.project_url }}/discussions" | ||
Changelog = "{{ cookiecutter.project_url }}/releases" | ||
|
||
|
||
{% include "build-system/base-pyproject.toml" %} | ||
{#- keep this line at the end of the file -#} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
from setuptools import setup # isort:skip | ||
|
||
# Available at setup time due to pyproject.toml | ||
from pybind11.setup_helpers import Pybind11Extension # isort:skip | ||
|
||
# Note: | ||
# Sort input source files if you glob sources to ensure bit-for-bit | ||
# reproducible builds (https://github.com/pybind/python_example/pull/53) | ||
|
||
ext_modules = [ | ||
Pybind11Extension( | ||
"{{ cookiecutter.project_slug }}._core", | ||
["src/main.cpp"], | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You should take a look at the path here again. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is an interesting discussion .. but I think we can have this discussion after we merge this PR |
||
cxx_std=11, | ||
), | ||
] | ||
|
||
|
||
setup( | ||
ext_modules=ext_modules, | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -55,6 +55,10 @@ elif command -v maturin &> /dev/null; then | |
pip install . | ||
elif [ "$(pip list|grep -c scikit_build_core)" -ne "0" ]; then | ||
pip install . | ||
elif [ "$(pip list|grep -c pybind11)" -ne "0" ]; then | ||
# Assuming you are inside the root of the CMake source directory | ||
pip install . | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should still be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. in my last PR I removed |
||
|
||
else | ||
# use setuptools | ||
pip install . | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think
PROJECT_DIRECTORY
automatically checks for flat orsrc
layout?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it for
main.cpp
which should be insrc
directory like this.your_project/
|-- setup.py
|-- pyproject.toml
|-- src/
| |-- main.cpp
| |-- other_cpp_files.cpp
| |-- your_module_name_here.cpp
| |-- your_module_name_here.h
|-- your_package/
| |-- init.py
| |-- your_module_name_here.py
|-- tests/
| |-- test_your_module_name_here.py
|-- README.md
|-- LICENSE
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is an interesting discussion ... maybe we can return to this discussion to check how we should proceed not just for this build-system but maybe for all build-systems.
also maybe in our repo, maybe we could have this files in folders called by the programming language (
cpp
,rust
, etc)